2016-03-23 32 views
0

我正在使用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) 
+1

22:30没有意义 –

+0

你需要决定在24“H:mm”之间或12小时“h:mm a”格式 –

+0

@LeoDabus 22:30 pm仅仅因为“pm”部分而没有意义? – victorpulak

回答

2

当你的日期转换为字符串,你失去了时区信息,然后将其无法拼凑回来一起。

是否有某些原因,您不能将日期本身作为NSDate存储,然后使用该日期而不是从字符串重新生成日期?

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

+0

所以这个过程是:从CloudKit中获取日期和时间,这是24小时格式。然后,我将该日期转换为iPhone的字符串以显示为文本(使用用户手机时区,因此我没有在CloudKit的末尾对硬件日期+时间进行硬编码)。然后我需要将字符串日期传递给Watch,这样我就可以使用它显示为一个字符串并对时间线条目进行排序。 – victorpulak

+0

所以,当我开始遇到问题的时候,就在手表方面。所以当我追踪这个问题时,我想让我在iPhone上试试这一切,看看当我将字符串转换回NSDate时是否也存在问题。 – victorpulak

+0

我希望能够帮助并使其更清楚,让我知道您的想法,如果您对我应该更改的内容或其他方面有什么建议。谢谢! – victorpulak

1

stringFromDate返回一个非可选的字符串,但dateFromString返回一个可选的日期。它打印出来之前有条件解开结果:

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

+0

真棒好信息!让我知道,如果你对我的主要问题有任何想法,那就是直到不同日期的日期。 – victorpulak

+0

Bolnad已经回答了这个 - 通过NSDate到Watch,而不是String。 – Darko

+0

Ps:或通过时区信息以及 – Darko