【问题标题】:Swift Time always late by 3 hours from real timeSwift Time 总是比实际时间晚 3 小时
【发布时间】:2020-01-12 04:00:48
【问题描述】:

我有一个包含一组小时时间字符串的数组,当我想将它更改为日期时,我比实际时间晚了 3 小时。

我的日期格式化程序如下所示

 let formatter = DateFormatter()
        formatter.dateFormat = "h:mm a"
        formatter.timeStyle = .short
        formatter.dateStyle = .none
 startArr = ["5:14 Am","1:07 PM" , "4:41 PM", "7:28 PM", "8:52 PM"]
            let startdateArray = (startArr).map { Calendar.current.dateComponents([.hour, .minute], from:formatter.date(from:$0)!) }
            let upcomingDates = startdateArray.map { Calendar.current.nextDate(after: Date(), matching: $0, matchingPolicy: .nextTime)!  }

            let nextDate = upcomingDates.sorted().first!
            print("next date", nextDate)
            for (i, n) in startArr.enumerated() {
                print(i, "->", n)
            }

我从上面的 sn-p 得到以下输出

下一个日期 2019-09-10 13:41:00 +0000

0 -> 凌晨 5 点 14 分

1 -> 下午 1:07

2 -> 下午 4:41

3 -> 晚上 7:28

4 -> 晚上 8:52

【问题讨论】:

  • 您是否尝试将格式化程序设置为您的时区?
  • 尝试添加这个formatter.timeZone = TimeZone(identifier: "UTC"
  • 是的,我试过了。但不工作
  • 您是否尝试为日历设置它?
  • 日期正确。 print 始终以 UTC 显示日期。 2019-09-10 13:41:00 +00002019-09-10 16:41:00 +0300 是同一时间点

标签: ios swift date nsdatecomponents


【解决方案1】:

DateFormattertimeZone设置为TimeZone(abbreviation: "GMT"),即

let startArr = ["5:14 AM", "1:07 PM", "4:41 PM", "7:28 PM", "8:52 PM"]
let formatter = DateFormatter()
formatter.dateFormat = "h:mm a"
formatter.timeZone = TimeZone(abbreviation: "GMT")
let datesArray = startArr.compactMap({ formatter.date(from: $0) })
print(datesArray)

【讨论】:

  • 它没有解决问题
  • 您遇到了什么问题?
【解决方案2】:

我已经通过制作另一个用于打印的格式化程序解决了这个问题

        let formatter = DateFormatter()
        formatter.dateFormat = "hh:mm a"
        formatter.timeZone = TimeZone(identifier: localTimeZoneName)

和打印格式化程序

        let printf = DateFormatter()
        printf.dateFormat = "yyyy-mm-dd hh:mm:ss"
        printf.timeZone = TimeZone(identifier: localTimeZoneName)

我使用printf格式化程序将nextDate转换为字符串后打印出来

     print("next date", printf.string(from: nextDate))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2015-12-25
    • 1970-01-01
    • 2015-11-29
    • 2011-10-27
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多