[英]NSDateFormatter returns nil while calling datefromstring method?
我正在尝试使用指定的格式化程序创建日期对象,但date formatter_datefromstring方法返回nil。 请让我知道清晰的文档样本。 我要解析的String是“ 2017年9月24日太平洋标准时间凌晨2:00”。 提前致谢
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setLocale:[NSLocale currentLocale]];
[dateFormat setDateFormat:@"h:mm a Z 'on' MMMM d, yyyy"];
NSLog(@"dateStr:==============> %@", dateStr);
NSDate *date = [dateFormat dateFromString:dateStr];
NSLog(@"Date:------------->%@", date);
return date;
您使用了错误的时区说明符。 Z
用于诸如-0800
时区。 对于短时区缩写(例如PDT
您需要z
。
同样,没有理由将格式化程序的本地设置为currentLocale
,将时区设置为systemTimeZone
因为这些是默认设置。 当您要分析的字符串包含时区信息时,格式化程序的时区就无关紧要。
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"h:mm a z 'on' MMMM d, yyyy"];
NSLog(@"dateStr:==============> %@", dateStr);
NSDate *date = [dateFormat dateFromString:dateStr];
NSLog(@"Date:------------->%@", date);
return date;
但是,由于您要解析英语的固定格式日期字符串,因此,您确实应该将格式程序的语言环境设置为en_US_POSIX
的特殊语言环境。 这将确保无论用户的语言环境如何,都可以处理英语月份的名称。
[dateFormat setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
您可以检查dateStr日期格式和给定格式是否相同。 如果两者的格式都不相同,则会得到nil对象。 在下面的示例中尝试使用dateStr格式。
NSString *dateStr = @"10:23 am Z on September 30, 2017";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setLocale:[NSLocale currentLocale]];
[dateFormat setDateFormat:@"h:mm a Z 'on' MMMM d, yyyy"];
NSLog(@"dateStr:==============> %@", dateStr);
NSDate *date = [dateFormat dateFromString:dateStr];
NSLog(@"Date:------------->%@", date);
在控制台中,您将获得2017年9月30日上午10:23,2017年9月23日09:54:04.654597 + 0530 Date [4068:79926] dateStr:==============> 2017-09-23 09:54:04.657359 + 0530 Date [4068:79926] Date:-------------> Sat Sep 30 15:53:00 2017
使用以下语言环境避免返回nil值。
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
如果有用,请投票给我
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.