【发布时间】:2016-03-15 04:06:54
【问题描述】:
我允许我的用户使用当地时区选择随机日期和时间。我希望能够以 UTC 格式将此日期字符串发送到服务器,以便世界上其他任何人都可以使用他们的本地时区读取它。我在网上阅读了很多关于如何将 UTC 转换为当地时间的文章,但反之则不然。我怎样才能做到这一点?
编辑:
首先,我使用第一个函数获取与用户选择的日期和时间连接的字符串,将其转换为 NSDate,然后将此 NSDate 转换为 UTC 字符串。这是实现我目标的最佳方法吗?
public class func localTimeZoneStringToDate(string: String) -> NSDate {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = NSTimeZone.localTimeZone()
return dateFormatter.dateFromString(string)!
}
public class func UTCStringFromDate(date: NSDate) -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
return dateFormatter.stringFromDate(date)
}
【问题讨论】:
-
NSDate始终以 UTC 时区存储日期和时间 -
您必须知道他们的本地日期和时间、他们的时区以及他们是否有夏令时。从这三个参数可以计算UTC
-
RFC 3339/ISO 8601 格式是发送到 Web 服务的标准。并且,如果用户的设备未使用公历,请记住使用
en_US_POSIX中的locale和 Technical Q&A 1480。 -
@contrabit 有没有可以参考的例子?因为这非常模糊,很难从中得出答案。
-
我的本地日期和时间是 2016-03-13 20:50。我住在不列颠哥伦比亚省温哥华,这意味着时区-8。当前夏令时有效 (+1h)。从那开始:UTC = 20:50 + 8h - 1h = 27:50 = 第二天 03:50 = 2016-03-14 03:50。现在在谷歌中输入“UTC时间”并检查是否正确。
标签: swift