当前日期的 NSDate 不同?

NSDate for current date is different?

当我注意到一些对我来说很有趣的事情时,我正试图找到下一个约会对象。当我做

let date = NSDate()
let calender = NSCalendar.current
let components = calender.dateComponents([.year, .month, .day], from: date as Date)
    dateLabel.text = "\(components.month!)/\(components.day!)/\(components.year!)"

我得到了我想要的日期,这是当前日期。

然而,当我这样做时

@IBAction func nextDate(_ sender: UIButton) {

    var oneDayfromNow: NSDate {
        return NSCalendar.current.date(byAdding: .day, value: 1, to: NSDate() as Date)! as NSDate
    }
    print("Current Date: \(calender)")
    print(oneDayfromNow)
}

在我打印的当前日期上,我实际上得到了下一个日期的日期,而我的 oneDayfromNow 变量是从现在起 2 天后的日期。所以简而言之,我的两个街区的当前日期不同。

谁能给我解释一下这是为什么?

谢谢

你知道我以前也认识类似的东西。我所有的 Date 值总是提前 8 小时(我住在北加州)。

查看名为 "ISO 8601"

的内容

ISO 8601 - Wikipedia

我不知道您是否熟悉祖鲁时间或现在称为 UTC(我认为是世界时间坐标)的时间,但这是忽略时区的世界时间。

您可能仍然得到正确的日期和时间,它们只是用 UTC 反映出来。

这里引用苹果开发者网站关于 NSDate,

NSDate objects encapsulate a single point in time, independent of any particular calendrical system or time zone. Date objects are immutable, representing an invariant time interval relative to an absolute reference date (00:00:00 UTC on 1 January 2001).

因此,这意味着它不指示任何特定区域的时间,而是表示某个特定时间的不透明对象。 NSDateFormatter 负责格式化日期并将其表示为您想要的时区。