NSDate 忽略时区
NSDate ignore timezone
如何使用 NSDate 完全忽略时区?
假设我将重要事件的日期设置为 2016-03-11T23:00:00.701-05:00
我只想 return 2016-03-11 23:00 不管你在哪里或者你在哪个时区。基本上如果我说那个事件将在特定的时间发生日期,我不希望它在任何人的 phone/device.
上发生任何变化
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let parsedDate = formatter.dateFromString(rawDate) {
return parsedDate
}
目前,如果我将其设置为+4 小时的时区,则显示的事件日期不正确。如果它是 -4 小时,那么时间部分是错误的。
除了将事件日期设置为字符串这一显而易见的做法之外,我还想将其保留为实际日期,这样排序会更容易 (ascending/descending)。
关于如何正确格式化和忽略时区的任何想法?
您应该将所有日期存储为 UTC 并将它们显示在查看它们的用户的时区中,这对您作为编码员和作为用户的人来说最有意义。
如果您必须完全按照您的说明进行操作,那么您需要在设置日期格式时设置语言环境,以免时区发生变化。此 Apple tech note 解释了如何在考虑和不考虑时区的情况下处理日期。
也许 NSDate
不是您想要的 - 因为忽略时区会使它的实例完全没有意义。
这就像在说 "this car costs 100"。或者 - 也许更合适 - "this car moved 100 meters. Where is it?"
因此,如果您只使用年、月、日、小时和分钟,这可能看起来像 NSDate
,但事实并非如此。它完全缺乏上下文——并且通过使用它,代码在说明它是什么和做了什么。
如何使用 NSDate 完全忽略时区?
假设我将重要事件的日期设置为 2016-03-11T23:00:00.701-05:00
我只想 return 2016-03-11 23:00 不管你在哪里或者你在哪个时区。基本上如果我说那个事件将在特定的时间发生日期,我不希望它在任何人的 phone/device.
上发生任何变化let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let parsedDate = formatter.dateFromString(rawDate) {
return parsedDate
}
目前,如果我将其设置为+4 小时的时区,则显示的事件日期不正确。如果它是 -4 小时,那么时间部分是错误的。
除了将事件日期设置为字符串这一显而易见的做法之外,我还想将其保留为实际日期,这样排序会更容易 (ascending/descending)。
关于如何正确格式化和忽略时区的任何想法?
您应该将所有日期存储为 UTC 并将它们显示在查看它们的用户的时区中,这对您作为编码员和作为用户的人来说最有意义。
如果您必须完全按照您的说明进行操作,那么您需要在设置日期格式时设置语言环境,以免时区发生变化。此 Apple tech note 解释了如何在考虑和不考虑时区的情况下处理日期。
也许 NSDate
不是您想要的 - 因为忽略时区会使它的实例完全没有意义。
这就像在说 "this car costs 100"。或者 - 也许更合适 - "this car moved 100 meters. Where is it?"
因此,如果您只使用年、月、日、小时和分钟,这可能看起来像 NSDate
,但事实并非如此。它完全缺乏上下文——并且通过使用它,代码在说明它是什么和做了什么。