swift - 如何忽略 Swift Dates 中的时区?
问题描述
我希望使用 Swift 5 创建一个 Date 对象,其中包含我传递的日期、月份和年份。问题是 DateFormatter 有自己的想法,并且似乎将我的 Date 对象视为 UTC ,即使我设置<formatter>.timeZone = ...
为。
假设我想要日期为 4 月 1 日的日期对象。
private func firstOfApril() -> String {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return "\(formatter.date(from: "2021-04-01")!)"
}
如果我在这里的上午 (GMT + 13) 这样做,我会得到2021-03-31 11:00:00 +0000
. 我预计:2021-04-01 00:00:00
我尝试过的:
enum TZType{
case None
case Current
case Auto
case Nil
case Default
}
private func firstOfApril(none_current:TZType) -> String {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
switch none_current {
case .None:
formatter.timeZone = .none
case .Current:
formatter.timeZone = .current
case .Nil:
formatter.timeZone = nil
case .Auto:
formatter.timeZone = .autoupdatingCurrent
case .Default:
break
}
return "\(formatter.date(from: "2021-04-01")!)"
}
print(firstOfApril(none_current: .None))
print(firstOfApril(none_current: .Current))
print(firstOfApril(none_current: .Auto))
print(firstOfApril(none_current: .Nil))
print(firstOfApril(none_current: .Default))
输出
2021-03-31 11:00:00 +0000
2021-03-31 11:00:00 +0000
2021-03-31 11:00:00 +0000
2021-03-31 11:00:00 +0000
我的应用程序中没有时区的概念。我认为应该有,但我被否决了。所有时间都是“本地时间”,如挂钟时间,而不是本地时区。
解决方案
里奥明白了。
该函数的最后几行应该是:
let retDate = formatter.date(from: "2021-04-01")!
return formatter.string(from: retDate)
总共:
private func firstOfApril(none_current:TZType) -> String {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
switch none_current {
case .None:
formatter.timeZone = .none
case .Current:
formatter.timeZone = .current
case .Nil:
formatter.timeZone = nil
case .Auto:
formatter.timeZone = .autoupdatingCurrent
case .Default:
break
}
let retDate = formatter.date(from: "2021-04-01")!
return formatter.string(from: retDate)
}
推荐阅读
- python - on_member_join 和删除不起作用。如何让它发挥作用?
- android - Mono.AndroidTools.AdbException:尝试读取流的末尾(在 Visual Studio 上)
- java - 如何创建一个元素少于给定数组的新数组?
- javascript - webpack5 output.library 无法导入
- angular - 扩充 OktaAuthService 打字稿模块时无法编译
- sql - SQLite 在 strftime 上给出负值
- javascript - 如何使用javascript从html表中删除firebase数据库节点?
- java - 如何保护 try with resources 语句之外的变量?
- regex - Notepad ++:在其他字符之前重新替换出现的字符
- postgresql - 尝试使用 SOH 作为从 AWS S3 导入 postgres 表的分隔符