【发布时间】:2019-04-21 23:53:47
【问题描述】:
如果我将“2019-01-01T00:00:00+0000”转换为日期,我希望日期是字符串中的日期 - 2019 年 1 月 1 日。如果我计算秒数时间部分,我希望结果为零。
问题是,当我将字符串转换为日期时,它存储在 UTC 时区中。我的语言环境设置为“en_US_POSIX”,我的时区设置为当前。我的日期格式化程序使用“yyyy-MM-dd'T'HH:mm:ssZ”。我知道最后的 Z 表示 UTC,但我似乎无法找出正确的字段符号来获得我想要的结果。
func convertToDate(_ dateString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = .current
let date = dateFormatter.date(from: dateString)
else {
print("DATE ERROR:", dateString)
return Date()
}
return date
}
【问题讨论】:
-
您是说要将日期字符串(UTC 时间)转换为本地日期(无论用户当前的时区碰巧是什么),并且在午夜具有相同的日期?因此,无论当前时区如何,所有用户都会在 2019 年 1 月 1 日午夜获得?
-
不,日期格式中的最终
Z并不表示UTC。它的意思是“解析日期字符串中指定的时区”。在这种情况下,字符串本身通过末尾的+0000指定 UTC 时区。 -
好问题。该应用程序适用于一个时区的一家公司,所以我想答案是肯定的,所有用户都应该得到 2019 年 1 月 1 日,无论如何。而且我必须重新检查关于 Z 的消息来源。我在网上找到了一篇很棒的文章,标题为“了解日期”,但显然,我还没有完全吸收所有这些信息。 (不过,这篇文章非常受欢迎。)