2014-01-19 75 views
0

NSDateFormatter转换成错误的日期不知道为什么错误转换

我使用下面的代码转换以下字符串19-01-2014下午1时06分54秒为日期

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"DD-MM-YYYY hh:mm:ss a"]; 
NSDate *date = [dateFormat dateFromString:startTime]; 

而且我得到下面的输出被incorrect.Please建议一些事情日期

印刷描述: 2014年1月4日7点36分54秒+0000

回答

0

打印NSDate将返回默认描述 - 因为NSDates不考虑语言环境,时区等,它默认为UTC +/- 0000(注意+0000)。

+0

但仍有4日至19日之间差距很大? – user2814822

+0

这是因为你的日期格式字符串不正确(请参阅martin的答案) – John

+0

顺便说一句,关于我的答案 - 我喜欢用于调试的一个很好的小助手方法是' - [NSDate descriptionWithLocale:]' – John

1

格式字符串中的“DD-MM-YYYY”部分不正确,应该是“dd-MM-yyyy”。 (见http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns为所有的日期格式 完整列表。)

你也应该设定一个“POSIX语言环境”是独立于用户的区域/地区的 设置:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd-MM-yyyy hh:mm:ss a"]; 
[dateFormat setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
NSDate *date = [dateFormat dateFromString:startTime]; 
+0

你也可以设置时区和日历*代替语言环境,如果这样做更有意义。 – trojanfoe

+0

@trojanfoe:这是两回事。如果输入具有固定的*格式,那么设置POSIX语言环境很有用,比较http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformatter-locale -特征。 - 如果日期本身不应该在当地时区解释,则可以设置时区。我不知道这是否也是一个问题。 –