【问题标题】:Date (String) to Date (ISO) at SwiftSwift 的日期(字符串)到日期(ISO)
【发布时间】:2019-07-30 11:07:22
【问题描述】:

我知道类似的问题,但是我找不到这个确切的问题:

在 iOS 应用程序中,我收到格式为 dd-MM-yyyy HH:mm:ss 的日期(即 30-07-2019 12:05:00)在 GMT +2h 中,我喜欢转换它到yyyy-MM-dd HH:mm:ss +0000 GMT ±0h(即 2019-07-30 10:05:00 +0000)。

我该怎么做?

【问题讨论】:

标签: swift date nsdateformatter nstimezone


【解决方案1】:

首先创建2个DateFormatter。 从 dateString 创建日期的第一个 dateFormat。 从创建日期创建字符串的第二个 dateFormat。

代码:

    let dateString = "30-07-2019 12:05:00"
    let dateFormatForDate = DateFormatter()
    dateFormatForDate.timeZone = TimeZone(abbreviation: "GMT+2")
    dateFormatForDate.dateFormat = "dd-MM-yyyy HH:mm:ss"

    //date
    let date = dateFormatForDate.date(from: dateString)


    let dateFormatForString = DateFormatter()
    dateFormatForString.timeZone = TimeZone(abbreviation: "GMT")
    dateFormatForString.dateFormat = "yyyy-MM-dd HH:mm:ss +0000"

    //string
    let formattedDateString = dateFormatForString.string(from: date!)

结果:

dateString: 30-07-2019 12:05:00
formattedDateString: 2019-07-30 09:05:00 +0000

【讨论】:

    【解决方案2】:
    extension Date {
        func convert(_ from: TimeZone, toTimeZone: TimeZone) -> Date {
            let delta = TimeInterval(toTimeZone.secondsFromGMT() - from.secondsFromGMT())
            return addingTimeInterval(delta)
        }
    }
    
    let dateFmt = DateFormatter()
    dateFmt.timeZone = TimeZone(abbreviation: "GMT+2")
    dateFmt.dateFormat = "dd-MM-yyyy HH:mm:ss"
    
    if let date = dateFmt.date(from: "30-07-2019 12:05:00") {
        let localDate = date.convert(TimeZone(abbreviation: "GMT+02")!, toTimeZone: TimeZone(abbreviation: "GMT+00")!)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      相关资源
      最近更新 更多