我正在尝试使用时间格式器从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))
答案 0 :(得分:2)
你不能"获得时区"来自日期选择器。你可以得到一个约会。日期将独立于设备的当前时区。
也许你认为你有不同的约会日期,但实际上,没有" UTC日期"或者" EST日期"。相反,只有一个日期,您使用日期格式化程序来显示各个时区。
请注意,代码中存在相当多的冗余。日期格式化程序的默认区域设置和时区已与您设置的值相同。此外,当您有一个返回NSDate
的方法时,您没有使用: NSDate
注释常量,从而使您的代码更加冗长和混乱。
请注意,如果print
日期,控制台将始终显示UTC。 e.g。
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"
答案 1 :(得分:1)
以上答案是完全错误的。日期选择器可随时在系统区域设置中报告日期,因此,如果datePicker显示08:00时间,并且您是GMT + 2,则选择器的属性日期将为06:00。
因此,要获取datePicker的绝对值,您必须将UTC时区传递给他,因为它确实加载了以下内容:
datePicker.timezone = TimeZone.init(identifier: "UTC")
现在,选择器的date属性将成为预期的并选择一个。
答案 2 :(得分:0)
要将 DatePicker 的时区设置为 UTC,请使用:
datePicker.timeZone = TimeZone.init(identifier: "UTC")
注意“timeZone”的驼峰命名法。 不幸的是,我没有足够的信用来评论上一篇文章,它几乎是正确的,所以我不得不创建一个新的答案。
小知识:TimeZone 自 iOS 2.0 以来就已经存在,如下所述: https://developer.apple.com/documentation/uikit/uidatepicker/1615976-timezone