如何使用日期格式化程序为“YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]”转换日期?
Posted
技术标签:
【中文标题】如何使用日期格式化程序为“YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]”转换日期?【英文标题】:How to convert date using dateformatter for "YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]"? 【发布时间】:2021-02-02 09:23:47 【问题描述】:我从服务器获取的日期是这种格式"2020-11-28T19:24:58.478641+05:30"
但我无法使用日期格式化程序将其转换为日期。
let input = "2020-11-28T19:24:58.478641+05:30"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateStyle = .full
formatter.setLocalizedDateFormatFromTemplate("YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]")
formatter.timeStyle = .full
let date = formatter.date(from: input)
print(date)
print(date)
在任何情况下都返回 nil。我尝试在线转换这个在https://nsdateformatter.com/成功的@
IMG ->converted date on nsdateformatter.com
如何使服务器日期适应 ios 现有的日期格式?
【问题讨论】:
需要哪种甲酸盐输出? 如果您使用日期格式,请停止使用timeStyle
和 dateStyle
,否则会破坏输出。想要一点小费吗?您的格式化程序所期望的字符串是:print(formatter.string(date: Date())
,您会看到。还有YYYY
、DD
等,它区分大小写,我不认为你想要它们大写。这不是正则表达式,也不是 [+HH:MM|-HH:MM|Z]
,这里不是小时,而是时区。
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ"
应该是诀窍。
是的,改成这种格式就可以了,非常感谢@Larme!
【参考方案1】:
你试过ISO8601DateFormatter吗?
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
let date = formatter.date(from: input)
【讨论】:
【参考方案2】:试试这个:
let dateString = "2020-11-28T19:24:58.478641+05:30"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSz"
let date = formatter.date(from: dateString)
date // Nov 28, 2020 at 5:24 AM
【讨论】:
您可以为小数秒添加一个 S 足以解析最多 3 个小数位数。 DateFormatter 将始终丢弃第三个数字之后的任何小数位。另请注意,如果 OP 使用相同的格式从生成的日期生成字符串,则使用 GMT+/-x 而不是 +XX:XX。取决于设备的当前时区。所以最好将日期格式化程序的时区设置为 UTC 并将其 dateFormat 更改为"yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
谢谢,我不知道这些点@LeoDabus
@LeoDabus 这真的很有帮助,我想我直到现在才找到合适的格式。
@rebel_codeaz 你不能同时使用 dateFormat 和 dateStyle。删除日期上方的最后 3 行代码(来自:输入)
是的,明白了。另外要转换为我的本地时间,我还需要将时区指定为 TimeZone(abbreviation: "GMT")以上是关于如何使用日期格式化程序为“YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]”转换日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MatLab 将 char 格式的日期转换为时间表格式