【问题标题】:Swift 4 wrong date and timeSwift 4 错误的日期和时间
【发布时间】:2020-08-04 19:59:24
【问题描述】:

我在时区方面遇到了困难,因为我试图将时间设置为午夜到 23:00:00,但是,结果显示从早上 6 点开始,直到第二天早上 5 点。我试图将时区设置为当前,结果仍然相同。这是我的代码

let day1num = Int(todaynumber.string(from: Date()))! + 1
let day1start = Calendar.current.date(bySetting: .day, value: day1num, of: Date())
let day1end = Calendar.current.date(bySetting: .hour, value: 23, of: day1start!)
print("\(day1start!) to \(day1end!)")

我得到了结果 2020-04-22 06:00:00 +0000 到 2020-04-23 05:00:00 +0000

我不想要第二天早上 6 点到早上 5 点,我想要结果: 2020-04-22 00:00:00 +0000 到 2020-04-22 23:00:00 +0000

我该如何解决? 谢谢!

【问题讨论】:

    标签: ios swift date timezone swift4


    【解决方案1】:

    您的问题是您误解了Date 以及它如何打印到控制台。

    Dates 代表时间点。将它们视为一个整数,表示自参考日期以来经过的时间量。它不是人类可读的字符串。要将日期转换为人类可读的字符串,您需要使用 DateFormatter 并确保将日期格式化程序的 timeZone 设置为您希望字符串代表的时区(它将默认为系统的当前时区)。 timeZone 将影响结果字符串的内容。例如,如果您有一个时区为太平洋时间的日期格式化程序,它可能会返回一个类似April 22, 2020 6:00 PM 的值,但是如果您将时区更改为山区时间并从日期中获取字符串,它将返回@ 987654327@.

    当您将Date 实例打印到控制台时,系统会将其格式化为UTC 时区中人类可读的字符串。如果我的数学计算正确,那么您正处于山区时间,这就是为什么您看到的记录值比您预期的值提前 6 小时。

    如果您想以用户看到的方式查看记录到控制台的日期,您应该使用DateFormatter 实例。它将默认使用用户的系统时区,然后使用您计算的Date 值来获取该日期的String 表示,然后将String 记录到控制台,而不是日期本身。

    let formatter = DateFormatter()
    formatter.dateStyle = .medium // Customize as needed
    formatter.timeStyle = .medium // Customize as needed
    // formatter.timeZone = ... something else if you don't want to use the system time zone
    let day1StartAsString = formatter.string(from: day1start!)
    let day1EndAsString = formatter.string(from: day1end!)
    print("\(day1StartAsString) to \(day1EndAsString)")
    

    【讨论】:

    • 您需要设置dateStyle & timeStyledateFormat。添加到上面的答案中。
    猜你喜欢
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多