繁体   English   中英

NSDateFormatter在调用datefromstring方法时返回nil?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM