1

I have a problem with the parsing date from the current date to date in GMT timezone.

extension Date {
    func getLocalizedDay() -> Date {
       let dateFormatter = DateFormatter()
       var calendar = Calendar.current
       calendar.timeZone = NSTimeZone(name: "GMT")! as TimeZone
       dateFormatter.calendar = calendar
       dateFormatter.locale = Locale.current
       dateFormatter.timeZone = TimeZone(identifier: "GMT")
       dateFormatter.dateFormat = "yyy-MM-dd HH:mm:ss"
       guard let otpDate = dateFormatter.date(from: dateFormatter.string(from: self)) else { return Date() }
       return otpDate
    }
}

When I print this I get a correct date but in string

dateFormatter.string(from: self)

When I try to convert it back to date like this:

dateFormatter.date(from: dateFormatter.string(from: self))

I get a date but in UTC...

Does anybody know how to solve this problem?

EDIT:

var dateFromatter = DateFormatter()
var calendar = Calendar.current
calendar.timeZone = NSTimeZone(name: "GMT")! as TimeZone
dateFromatter.calendar = calendar
dateFromatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let now = Date()

let dateInString = dateFromatter.string(from: now)
print(dateInString) // 2020-05-02 13:11:01
print(dateFromatter.date(from: dateInString)!) // 2020-05-02 11:11:01 +0000
Daveloper
  • 606
  • 5
  • 12

1 Answers1

0

The formulae i know is, when u get a Date object it is always in UTC/GMT.

Whe u are using date formatter , Date -> String , sting u will get is related time zone u set.

When u convert String -> Date, Date wu willget in always in UTC/GMT, no matter what time zone u set.

///1 Now is a date in UTC -> converting to UTC date strng right. print(dateFromatter.string(from: now)) // 2020-05-02 12:53:43

///2 You are converting UTC Date String to Date, which will be in UTC print(dateFromatter.date(from: dateFromatter.string(from: now))!) // 2020-05-02 10:53:43 +0000

Arpit B Parekh
  • 1,932
  • 5
  • 36
  • 57