ios Swift 没有时间的日期
ios Swift Date without Time
我试图只获取表示小时、分钟、秒为零的日期。这就是我正在尝试的
extension Date {
var onlyDate: Date? {
get {
let calender = Calendar.current
var dateComponents = calender.dateComponents([.year, .month, .day], from: self)
dateComponents.timeZone = NSTimeZone.system
return calender.date(from: dateComponents)
}
}
}
当我尝试时
date = Date().onlyDate
它 returns 前一个日期。你可以查看截图,它给我的是 4 月 14 日,而它应该是 15 日
让我猜猜,你是在 GMT+6 时区,是吗?
打印 Date
时,它们总是以 UTC 显示。
2019-04-14 18:00 UTC 与 2019-04-15 00:00相同在您当地的时区。
你的代码没有错。它工作正常。
要在您的时区查看它,请使用 DateFormatter
并设置 timeZone
属性:
let formatter = DateFormatter()
formatter.timeStyle = .none
formatter.dateStyle = .full
formatter.timeZone = TimeZone.current
print(formatter.string(from: Date().onlyDate))
日期是一个时间点。将其某些组件设为零只能与给定时区、日历结合使用。
你所做的看起来是正确的。但问题是您的调试器如何显示日期。它再次需要使用某个时区、日历,这可能与您计算机(或设备)上的内容相匹配。
为了更有意义,假设我使用的是 UTC,但在 -1 中调试它。然后,如果我创建一个日期 15.4.2019 at 0:00:00
但对其进行调试,我将看到 14.4.2019 at 23:00:00
.
所以 Date
本身就不是人类可读的。下面是我相信从 EPOCH 1.1.1970 UTC 开始计算秒数的双精度浮点值。您需要将日历和时区应用于 Date
实例,并使用格式化程序将其转换为您可以阅读的内容(如 14.4.2019 at 23:00:00
中的可读)。如果日历或时区不一样,那么结果将不一样。因为在某些时候 14.4.2019 at 23:00:00
和 15.4.2019 at 0:00:00
是地球上两个不同位置的完全相同的时刻。
我试图只获取表示小时、分钟、秒为零的日期。这就是我正在尝试的
extension Date {
var onlyDate: Date? {
get {
let calender = Calendar.current
var dateComponents = calender.dateComponents([.year, .month, .day], from: self)
dateComponents.timeZone = NSTimeZone.system
return calender.date(from: dateComponents)
}
}
}
当我尝试时
date = Date().onlyDate
它 returns 前一个日期。你可以查看截图,它给我的是 4 月 14 日,而它应该是 15 日
让我猜猜,你是在 GMT+6 时区,是吗?
打印 Date
时,它们总是以 UTC 显示。
2019-04-14 18:00 UTC 与 2019-04-15 00:00相同在您当地的时区。
你的代码没有错。它工作正常。
要在您的时区查看它,请使用 DateFormatter
并设置 timeZone
属性:
let formatter = DateFormatter()
formatter.timeStyle = .none
formatter.dateStyle = .full
formatter.timeZone = TimeZone.current
print(formatter.string(from: Date().onlyDate))
日期是一个时间点。将其某些组件设为零只能与给定时区、日历结合使用。
你所做的看起来是正确的。但问题是您的调试器如何显示日期。它再次需要使用某个时区、日历,这可能与您计算机(或设备)上的内容相匹配。
为了更有意义,假设我使用的是 UTC,但在 -1 中调试它。然后,如果我创建一个日期 15.4.2019 at 0:00:00
但对其进行调试,我将看到 14.4.2019 at 23:00:00
.
所以 Date
本身就不是人类可读的。下面是我相信从 EPOCH 1.1.1970 UTC 开始计算秒数的双精度浮点值。您需要将日历和时区应用于 Date
实例,并使用格式化程序将其转换为您可以阅读的内容(如 14.4.2019 at 23:00:00
中的可读)。如果日历或时区不一样,那么结果将不一样。因为在某些时候 14.4.2019 at 23:00:00
和 15.4.2019 at 0:00:00
是地球上两个不同位置的完全相同的时刻。