【发布时间】:2017-07-17 12:41:52
【问题描述】:
我想将 UTC 日期转换为本地日期而不是本地字符串。我尝试再次将 UTC 日期转换为本地日期(字符串),然后尝试将本地日期(字符串)转换为本地日期。它仅返回 UTC 日期。我什至每次都尝试给出时区。没有任何效果。如果有人知道,我错在哪里?
let dateFormator = DateFormatter()
dateFormator.dateFormat = inputDateStringFormat
if fromUTC {
dateFormator.timeZone = TimeZone(abbreviation: "UTC")
} else {
dateFormator.timeZone = TimeZone.current
}
let resultDate = dateFormator.date(from: inputDateString)
dateFormator.dateFormat = reqDateStringFormat
if toUTC {
dateFormator.timeZone = TimeZone(abbreviation: "UTC")
} else {
dateFormator.timeZone = TimeZone.current
}
guard let dateToConvert = resultDate else { return nil }
let resultString = dateFormator.string(from: dateToConvert)
let finalDateFormater = DateFormatter()
finalDateFormater.dateFormat = reqDateStringFormat
if toUTC {
finalDateFormater.timeZone = TimeZone(abbreviation: "UTC")
} else {
finalDateFormater.timeZone = TimeZone.current
}
if let requiredDate = finalDateFormater.date(from: resultString) {
return requiredDate
} else {
return nil
}
财年:
- toUTC 值为假
- inputDateStringFormat 是“yyyy-MM-dd HH:mm:ss”
- 来自 UTC 是真的
- inputDateString 是“2017-07-18 04:45:00”
- reqDateStringFormat 是“yyyy-MM-dd HH:mm:ss”
【问题讨论】:
-
A
Date是一个绝对时间点,没有时区。没有“UTC 日期”或“本地日期”之类的东西。 -
string 有格式,
Date没有。 – 请用您真正需要的信息更新问题。给定的输入是什么,预期的输出是什么? -
正如 Martin R 已经提到的,
Date是一个绝对时间点,它没有与之关联的时区。您只能有相对时间点的字符串表示形式(特定时区中的日期)。告诉我们您真正想要实现的目标,然后我们可以提供更多帮助,但从提供的信息中不清楚您为什么需要时间表示以及 Date 字符串是否足以满足您的需求。 -
返回第 1 步:
Date是一个绝对时间点,没有时区(并且打印 Date 始终使用 UTC)。 -
我厌倦了听到“日期没有时区......它是 UTC”。 UTC 是一个时区。我想知道“今天”是什么。如果是在美国东部标准时间 1 月 1 日晚上 8 点之后,我希望“今天”是 1 月 1 日。我不只是想显示今天是 1 月 1 日。我今天调用的 API 需要在 1 月 1 日进行。 Date 类的一个限制是,这样做的唯一方法是转换为 String,然后再转换回 Date。
标签: swift