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,但事实并非如此。它完全缺乏上下文——并且通过使用它,代码在说明它是什么和做了什么。