将时间字符串转换为日期快速

时间:2017-02-19 21:40:07

标签: swift nsdate

我使用firebase作为后端并存储一串时间,如下午7:00。

我正在尝试转换从Firebase收到的字符串并将其转换为NSDate,以便我可以对其进行排序,更改时间..等等

到目前为止,我已经在线查看了这段代码

dateFormatter.dateFormat = "hh:mm a"
                  dateFormatter.locale = NSLocale.current
                  dateFormatter.timeZone = NSTimeZone.local
                  let date = dateFormatter.date(from: item)
                  self.times.append(date!)
                  print("Start: \(date)")

其中item是字符串(晚上7点)

当我运行应用程序时,控制台返回:

  

项目:上午9:00

     

开始:可选(2000-01-01 05:00:00 +0000)

我设置了时区,语言环境,格式。为什么返回的时间不正确?

打印出一些其他例子:

  

项目:下午1:20

     

开始:可选(2000-01-01 17:20:00 +0000)

     

项目:上午9:40

     

开始:可选(2000-01-01 05:40:00 +0000)

     

项目:上午10:00

     

开始:可选(2000-01-01 05:00:00 +0000)

     

项目:中午12:00

     

开始:可选(2000-01-01 17:00:00 +0000)

1 个答案:

答案 0 :(得分:5)

永远记住这一点:Date / NSDate以UTC格式存储时间。如果您的时区不是UTC,则print(date)返回的值将始终不同。

您可以通过指定UTC时区将其打印出存储在Firebase中的小时。默认值是用户(即您的)时区:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

let item = "7:00 PM"
let date = dateFormatter.date(from: item)
print("Start: \(date)") // Start: Optional(2000-01-01 19:00:00 +0000)