swift 4 中格式化日期的问题

Issue in formatting Date in swift 4

我在 swift 4 中格式化日期时遇到问题 下面提供格式化源代码时HH:mm:ss获取错误数据的时间。

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

我得到的结果是:2020 年 8 月 11 日 12:01:23 下午

如果我尝试将字符串日期的结果转换为日期

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

我得到的结果是:2020-08-11 06:31:39 +0000

预期必须是:2020-08-11 12:01:23 +0000
但我得到的结果是:2020-08-11 06:31:39 +0000

有知道解决方法的请给我一个解决方法

HH:mm:ss 为您提供 24 小时格式的时间,因此 a 在格式中没有意义。或者你可以使用 hh:mm:ss a.

Date() 给你 UTC 的时间。您需要提供时区信息以获取您所在时区的日期。

    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 将为您提供当前时区的日期。

问题出在你的格式上。如果您尝试使用 dateFormat = "dd-MMM-yyyy HH:mm:ss",您将获得预期的结果。另外,我建议您设置 localetimezone。例如:

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)!