日期工作的字符串,字符串中的日期不起作用

时间:2016-03-23 00:41:08

标签: xcode swift nsdate nsdateformatter

我正在使用NSDate并将其转换为dateString。但是......然后......

当我尝试使用相同的dateString并将其转回NSDate时,我的日期不正确。

NSDate到dateString ...

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy H:mm a"
let dateString = dateFormatter.stringFromDate(timeDate as! NSDate)
print("Date: \(dateString)")

控制台:

Date: Mar 22, 2016 22:30 PM
Date: Mar 23, 2016 1:00 AM
Date: Mar 23, 2016 9:00 AM

dateStringplainDate ...

let reverseDateFormatter = NSDateFormatter()
reverseDateFormatter.dateFormat = "MMM d, yyyy H:mm a"
let plainDate = reverseDateFormatter.dateFromString(dateString)
print("Date Reverse: \(plainDate)")

控制台:

Date Reverse: Optional(2016-03-22 17:30:00 +0000)
Date Reverse: Optional(2016-03-23 05:00:00 +0000)
Date Reverse: Optional(2016-03-23 05:00:00 +0000)

2 个答案:

答案 0 :(得分:2)

当您将日期转换为字符串时,您丢失了时区信息,然后无法将其重新组合在一起。

是否有某些原因您无法将Date本身存储为NSDate,然后使用它而不是从字符串重新构建日期?

如果您需要将其转换回字符串中的完整日期,则需要调整格式以存储时区

答案 1 :(得分:1)

stringFromDate返回非可选字符串,但dateFromString返回可选日期。在打印之前有条件地打开结果:

  

如果let result = reverseDateFormatter.dateFromString(dateString){           打印(结果)       }