Date 中的字符串有效,String 中的日期无效

String from Date works, Date from String doesn't work

我正在将 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)

当您将日期转换为字符串时,您会丢失时区信息,然后无法将其拼凑起来。

有什么原因不能将日期本身存储为 NSDate 然后使用它而不是从字符串重新构建日期吗?

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

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

if let result = reverseDateFormatter.dateFromString(dateString) { print(result) }