如何在没有时区的情况下解析 ISO8061 至今
Posted
技术标签:
【中文标题】如何在没有时区的情况下解析 ISO8061 至今【英文标题】:How to parse ISO8061 to date without timezone 【发布时间】:2018-10-21 01:06:28 【问题描述】:我从服务器接收 JSON 格式的数据,其中一个字段是 date
,其中包含年、月和日:
"date": "2018-03-11",
我不需要确切的时间,只需要一天和一个月。我使用了带有语言环境的 DateFormatter,但我仍然收到来自 UTC 时区的日期。我住在 CET (+1)/ CEST (+2) 时区,所以我想知道解析这个日期的最佳方法是什么。当我从服务器收到"2018-03-11"
时,我想得到:
date = 2018-03-11 00:00:00
日期格式化程序:
private let dateFormatter: DateFormatter =
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: Calendar.Identifier.iso8601)
dateFormatter.locale = Locale(identifier: "pl_PL")
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter
()
【问题讨论】:
问题是,如果你只需要日期和月份,你仍然需要一个时区......当星期五在法国开始时,在英国仍然是星期四。 提供你目前所拥有的。 @ÁlvaroGonzález 那么来自服务器的日期应该是什么样的? @bcr 我已经用 DateFormatter 更新了帖子 ISO 8601 中的时区表示为本地时间(未指定位置),表示为 UTC。如果您收到“2018-03-11”,您想要零填充小时/分钟 - 对吗?在这种情况下,请修复服务器端以发送 json。 【参考方案1】:随便用
dateFormatter.locale = Locale.current
dateFormatter.timeZone = TimeZone.init(identifier: "UTC")
let dateFormatter: DateFormatter =
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeZone = TimeZone.init(identifier: "UTC")
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter
()
print(dateFormatter.date(from: "2018-03-11"))
【讨论】:
不幸的是它返回错误的日期:例如2018-03-11
我得到:date = 2018-03-10 23:00:00 +0000;
好的,谢谢。我不知道这是否是最好的解决方案,但它有效?以上是关于如何在没有时区的情况下解析 ISO8061 至今的主要内容,如果未能解决你的问题,请参考以下文章
Flutter: DateTime 作为改造方法中的参数; DateTime ISO 8061 序列化;改造日期 iso8061 格式
如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?