Issue in formatting Date in swift 4

I am having a Issue in formatting Date in swift 4 The time HH:mm:ss getting wrong data, when formatting the source code is provided below.

    let dateFormatter : DateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss a
    let date = Date()
    let dateString = dateFormatter.string(from: date)

I am getting result as : 11-Aug-2020 12:01:23 PM

If i am trying to convert the result of string date to date

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss a" 
    let serverDate: Date = dateFormatter.date(from: dateString)! 

I am getting result as : 2020-08-11 06:31:39 +0000

Expected must be : 2020-08-11 12:01:23 +0000
But i am getting result as : 2020-08-11 06:31:39 +0000

If anyone know the solution, please give me a solution.

Upvotes: 0

Views: 510

Answers (2)

Hadži Lazar Pešić
Hadži Lazar Pešić

Reputation: 1051

The problem is in your format. If you try with dateFormat = "dd-MMM-yyyy HH:mm:ss", you will get expected results. Also, I recommend you to set locale and timezone. For example:

let dateFormatter: DateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = NSTimeZone.local
dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss"
let date = Date()
let dateString = dateFormatter.string(from: date)

let serverDate: Date = dateFormatter.date(from: dateString)!

Upvotes: 1

Jithin
Jithin

Reputation: 943

HH:mm:ss gives you the time in 24 hour format, so a doesn't make sense inside the format. Or you can use hh:mm:ss a.

Date() gives you the time in UTC. You need to provide the timezone information to get the date in your timezone.

    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss"
    dateFormatter.timeZone = .current
    let localDate = dateFormatter.string(from: date)
    
    print(localDate)

localDate will give you the date in your current timezone.

Upvotes: 2

Related Questions