我正在尝试使用指定的格式化程序创建日期对象,但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。对于短时区缩写(例如z),您需要PDT

同样,没有理由将格式化程序的本地设置为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"]];

关于ios - NSDateFormatter在调用datefromstring方法时返回nil?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46375910/

10-14 20:49