我有以下代码NSDate
从NSString
对象创建对象。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm aa M/dd/yyyy"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSString *day = @"3/26/2015";
NSString *time = @"10:24 PM";
NSString *dateString = [NSString stringWithFormat:@"%@ %@", time, day];
NSDate *date = [dateFormatter dateFromString:dateString];
这段代码可在模拟器上完美运行,并在我的时区中产生确切的对应时间。但是,当我在装有iOS 8的设备上运行时,date
设置为nil
。
任何帮助或有关此信息将不胜感激。提前致谢。
编辑:我正在尝试从格式化的NSString创建NSDate对象,而不是在预定义的fromat中从系统获取日期。这个问题的可能重复之处可能密切相关,但我无法找到适合我情况的解决方案。
编辑2:我刚刚注意到只有在“设置”中启用了24小时制时,才会出现此问题。但是,我没有办法知道设备所有者使用的是哪种格式,因此我仍然需要一个解决方案。
使用这种严格的日期格式时,需要设置区域设置,以避免在格式化日期时设备当前的区域设置出现问题。否则,NSDateFormatter
将会使用设备的语言环境,这说明只有在“设置”中启用“ 24小时制”时,它才会发生。
请参阅Apple的文档:
在所有情况下,您都应考虑格式化程序默认使用
currentLocale
与用户首选项设置叠加的用户语言环境()。如果要使用用户的语言环境但没有其各自的设置,则可以从当前用户语言环境(localeIdentifier
)获取语言环境ID,并使用该语言环境创建一个新的“标准”语言环境,然后将标准语言环境设置为格式化程序的语言环境。
例如,在您的情况下,可以使用en_US_POSIX
:
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.locale = enUSPOSIXLocale;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句