【发布时间】:2016-12-22 07:33:03
【问题描述】:
我的 API 以 UTC 格式向我发送日期字符串,例如 2016 年 2 月 20 日上午 11:45。 为了在我的时区显示日期,我将日期从 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 字符串转换为日期。
请检查设备中的上述代码,它在模拟器中运行良好。
【问题讨论】:
-
使用
HH代替hh,hh用于12小时格式,HH用于24小时格式。 -
将日期格式化程序区域设置为“Posix”,比较stackoverflow.com/questions/40692378/…。
-
@MartinR 在将 dateFormatter 语言环境分配给“POSIX”后,格式需要包含“HH”而不是“hh”(如您的回答中所述),对吗?
-
@AhmadF: 不,您也可以在修复语言环境之后将其设置为“hh a”。设置“Posix 语言环境”是为了忽略用户的语言环境设置。
-
@MartinR 好的,我知道需要更改语言环境,但是“HH”是 24 小时格式,如果“hh”保持原样,它应该如何工作?很抱歉打扰,但我真的很想了解这里发生了什么:)
标签: ios swift date datetime nsdateformatter