字符串中日期的奇怪问题

时间:2012-04-18 09:05:44

标签: iphone objective-c ios xcode4 nsdate

一个奇怪的问题:

我通过以下代码将字符串转换为日期:

NSString *dateStr = @"02/10/2012 12:00:13 PM";

NSDateFormatter *dtF = [[NSDateFormatter alloc] init];
[dtF setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];

NSDate *d = [dtF dateFromString:dateStr];
NSDateFormatter *dateFormatStr = [[NSDateFormatter alloc] init];

[dateFormatStr setDateFormat:@"MMMM dd, yyyy HH:mm a"];
NSString *strDate = [dateFormatStr stringFromDate:d];   
NSLog(@"Output:::-->%@",strDate);

我正在使用 Xcode 4.2

模拟器和设备iPhone 3Gs以及iOS 5.0和iPhone 4的iPad中工作正常

但问题出在 iPod with iOS 5.0.1 。在iPod中,它显示(null)值。

代码有什么问题?或者还有其他问题吗?

3 个答案:

答案 0 :(得分:3)

我发现由于iPhone上的用户设置,NSDateFormatter输出可能不稳定。你可以使用这个 -

强制它标准化(我不记得细节)
[dtF setLocale:enUSPOSIXLocale];

...使整个输出更具可预测性。

答案 1 :(得分:2)

而不是a尝试aaa

用以下内容替换您的代码:

NSString *dateStr = @"02/10/2012 12:00:13 PM";

NSDateFormatter *dtF = [[NSDateFormatter alloc] init];
[dtF setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];

NSDate *d = [dtF dateFromString:dateStr];
NSDateFormatter *dateFormatStr = [[NSDateFormatter alloc] init];

[dateFormatStr setDateFormat:@"MMMM dd, yyyy hh:mm aaa"];
NSString *strDate = [dateFormatStr stringFromDate:d];   
NSLog(@"Output:::-->%@",strDate);

输出::: - > February 10, 2012 12:00 PM

答案 2 :(得分:1)

解决了!!!

问题出在日期字符串NSString *dateStr = @"02/10/2012 12:00:13 PM";

时间是24小时格式“AM / PM”我认为这是错误的。 AM / PM 应采用12小时格式。

所以,我刚刚从字符串中删除了 AM / PM ,它确实有用!!!

也来自代码:

[dtF setDateFormat:@"MM/dd/yyyy HH:mm:ss"];