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"。
我的 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"。