当前日期也会带回时间

时间:2019-07-12 16:17:16

标签: swift

我只想获取日期,我这样写:

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

为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:0)

Date很不幸被命名。它与日期无关。它代表时间的瞬间。所有观察者(忽略相对论之类的细节)都会达成共识的瞬间。这不是“日历上的一天”。这是一个时间点,与任何日历无关。

它以“类似日历的方式”打印出来的事实只是调试方便。

如果您想要“日历中的特定日期”,则所需的工具是DateComponentsCalendar,而不是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())
}

(或在需要时使用公历,尽管我不认为任何受支持的日历都对一天的开始时间有所不同。)