我只想获取日期,我这样写:
func getCurrentDate() -> Date {
dateFormatter.dateFormat = "dd.MM.yyyy"
let result = dateFormatter.string(from: date)
print(result)
let date = dateFormatter.date(from: result)
return date!
}
打印“结果”,我得到:
12.07.2019
这是我需要的,但是将其转换为Date类型并打印出来会导致:
2019-07-11 21:00:00 +0000
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:0)
Date
很不幸被命名。它与日期无关。它代表时间的瞬间。所有观察者(忽略相对论之类的细节)都会达成共识的瞬间。这不是“日历上的一天”。这是一个时间点,与任何日历无关。
它以“类似日历的方式”打印出来的事实只是调试方便。
如果您想要“日历中的特定日期”,则所需的工具是DateComponents
和Calendar
,而不是Date
:
func currentDay() -> DateComponents {
return Calendar.current.dateComponents([.year, .month, .day], from: Date())
}
请记住,用户当前的日历可能不是公历。如果您需要公历,则需要这样说:
func currentDay() -> DateComponents {
return Calendar(identifier: .gregorian).dateComponents([.year, .month, .day],
from: Date())
}
格里高利历是当前年份为2019年的日历。在希伯来语日历中是5779。在佛教日历中是2562。在伊斯兰日历中是1440。没有一个“正确的”日历,这就是为什么您需要提供一个。
阅读您的评论后,您可能会说“使用当前日历的'今天'的开始”。如果那是您想要的,那么您将使用此:
func currentDay() -> Date {
return Calendar.current.startOfDay(for: Date())
}
(或在需要时使用公历,尽管我不认为任何受支持的日历都对一天的开始时间有所不同。)