Swift: 从日期选择器获取正确的时区?

Swift: Get correct time zone from Date Picker?

我正在尝试使用时间格式化程序从 swift 中的日期选择器获取正确的时区,但它不起作用。我得到的是 UTC,而不是 EST。

1) 如果我打印 dateFormatter.stringFromDate(datePicker) 我得到 EST,但是

2) 我不需要字符串,我需要 EST 中的 NSDate 所以

3) 我可以用它来获取 EST 中的 timeIntervalSinceDate(NSDate)。

我尝试将它从字符串取回 NSDate 的技巧没有奏效,如下所示。它仍然是 UTC,并且自日期以来的时间间隔不正确。

dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.timeZone = NSTimeZone.localTimeZone()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date: NSDate = dateFormatter.dateFromString(dateFormatter.stringFromDate(datePicker))!
print(date)
print(date.timeIntervalSinceDate(datePicker))

您不能 "get a time zone" 从日期选择器。你可以约会。日期将独立于设备的当前时区。

也许你认为你有一个不同的日期,但实际上,没有 "UTC date" 或 "EST date" 这样的东西。相反,只有一个日期,您可以使用日期格式化程序为不同的时区显示它们。

请注意,您的代码中有相当多的冗余。日期格式化程序的默认语言环境和时区已与您设置的值相同。另外,当你有一个 returns a NSDate 的方法时,你没有用 : NSDate 注释常量,使你的代码更加冗长和混乱。

请注意,如果您 print 一个日期,控制台将始终显示 UTC。例如

let date = NSDate() // Nov 10, 9:44 PM
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd hh:mm a"
let dateString = dateFormatter.stringFromDate(date) // "2015-11-10 09:44 PM"
print(date) // "2015-11-10 20:44:54 +0000\n"

以上回答完全错误。日期选择器随时报告系统区域设置中的日期,因此,如果日期选择器显示 08:00 时间并且您是 GMT+2,则选择器的 属性 日期将为 06:00.

因此,为了获得 datePicker 的绝对值,您必须将视图中的 UTC 时区传递给他:

datePicker.timeZone = TimeZone.init(identifier: "UTC")

现在,选择器的日期 属性 将是预期和选择的日期。

要将 DatePicker 的时区设置为 UTC,请使用:

datePicker.timeZone = TimeZone.init(identifier: "UTC")

注意“timeZone”的驼峰式表示法。 不幸的是,我没有足够的信用来评论最后一个 post,它几乎是正确的,所以我不得不创建一个新的答案。

一些小知识:TimeZone 自 iOS 2.0 以来一直存在,如下所述: https://developer.apple.com/documentation/uikit/uidatepicker/1615976-timezone

那些试图找到解决方案但无法解决确切问题的人。这是我尝试过的东西: 使用 time.addTimeInterval(-14400) 函数,其中 -14400 是 4 小时的时差。因此,如果您希望 UTC 到 EST,请执行此操作。 像这样:-

var time = Date() // assuming you have this in UTC
time.addTimeInterval(-14400)

您还可以使用 addingTimeInterval 函数,returns 您可以得到新的日期。 我知道这有点靠不住,因为我们是手动执行此操作,但希望它对某人有所帮助。