NSDate在模拟器和设备(ipad)中有所不同

时间:2014-08-18 13:27:52

标签: ios objective-c ipad nsdate nsdateformatter

您好我在我的项目中将GMT时间转换为当地时间 - 我在所有模拟器和iPhone / iPod中获得正确的值 - 但是当我在iPad中运行时我得到null, 这是我的代码 -

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"HH:mm:ss";
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSDate *startDate = [dateFormatter dateFromString:@"14:37:00"];  


NSLog(@"startDate---%@",startDate);

//This is startDate---2000-01-01 14:37:00 +0000 (in simulator/iPod/iphone)
 //  startDate---(null)  (in ipad)

问题在于用户的ipad时间格式 - 如果是12小时格式 - 那么上面的代码结果为null 我该怎么办这个问题??

1 个答案:

答案 0 :(得分:1)

因为你在ipad设备上将时间格式设置为12小时,日期字符串是24小时格式,请查看字符串@" 14:37:00"。

使用

dateFormatter.dateFormat = @"hh:mm:ss";
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

Reference

如果您想强制它进入12小时模式,无论用户的24/12小时模式设置如何,您都应该将语言环境设置为en_US_POSIX。

使用hh而不是HH。

hh通常是12小时,而HH通常是24小时。

一个很好的官方参考资料as linked by Apple themselveshere。另一个好桌子是here,如Zaph所述。