在swift中的Dateformatter问题

时间:2016-12-22 07:33:03

标签: ios swift date datetime nsdateformatter

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

data-value

如果我的设备时间格式为12 HR,上面的代码工作正常,但如果我使用24小时的设备日期,则上面的代码无效。事件,它无法将UTC字符串转换为日期。

请检查设备上面的代码,它在模拟器中工作正常。

3 个答案:

答案 0 :(得分:2)

在@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”。

答案 1 :(得分:0)

快速解决此问题是将12小时转换为34小时格式。

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

答案 2 :(得分:0)

使用Swift 3.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)

如果有效,请告诉我。