swift 中的日期格式化程序问题

Dateformatter issue in swift

我的 API 以 UTC 格式向我发送日期字符串,例如 2/20/2016 11:45 AM。 为了在我的时区显示日期,我将日期从 UTC 转换为本地时区,如下面的代码

    let sourceDateString = "12/20/2016 11:45 AM"
    let formatter = DateFormatter()
     formatter.dateFormat = "MM/dd/yyyy hh:mm a"
     formatter.timeZone = TimeZone(identifier: "UTC")
     let date = formatter.date(from: sourceDateString)

     print(date)

     formatter.timeZone = NSTimeZone.local
     formatter.dateFormat = "MMM dd,yyyy hh:mm a"

     let strDate = formatter.string(from: date!)
     print(strDate)

如果我的设备时间格式是 12 小时制,上面的代码可以正常工作,但是如果我使用我的设备的 24 小时制日期,那么上面的代码就不起作用。事件无法将 UTC 字符串转换为日期。

请在设备中检查以上代码,它在模拟器中运行良好。

对此的快速修复是将 12 小时制转换为 24 小时制。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateformatter.dateFormat = @"hh:mm a";
NSDate *date = [dateformatter dateFromString:departTime];
dateformatter.dateFormat = @"HH:mm";
NSString *time24 = [dateformatter stringFromDate:date];
departTimelbl.text=time24;

在这里你可以替换 formatter.dateFormat = "MM/dd/yyyy hh:mm a"formatter.dateFormat = "MM/dd/yyyy HH:mm

代码写在Swift3.0

您需要在日期格式化程序上提供本地标识符。

下面是经过测试的有效代码。

let sourceDateString = "12/22/2016 09:19 AM"
    let formatter = DateFormatter()
    formatter.dateFormat = "MM/dd/yyyy hh:mm a"
    formatter.locale = Locale(identifier: "en-US")
    formatter.timeZone = TimeZone(identifier: "UTC")
    let date = formatter.date(from: sourceDateString)

    print("\(date)")

    formatter.timeZone = NSTimeZone.local
    formatter.dateFormat = "MMM dd,yyyy hh:mm a"

    let strDate = formatter.string(from: date!)
    print(strDate)

如果有效请告诉我。

在@Martin R 的帮助下,以下代码对我有用。

    let sourceDateString = "12/20/2016 11:45 AM"
    let formatter = DateFormatter()
    formatter.dateFormat = "MM/dd/yyyy hh:mm a"
    formatter.timeZone = TimeZone(identifier: "UTC")
    formatter.locale = Locale(identifier: "en_US_POSIX")
    let date = formatter.date(from: sourceDateString)

    print(date)

    formatter.timeZone = NSTimeZone.local
    formatter.dateFormat = "MMM dd,yyyy hh:mm a"

    let strDate = formatter.string(from: date!)
    print(strDate)

我忘了添加 "POSIX"。