iOS nsdateformatter AM/PM issue

requirement很简单,需要显示的时间格式满足:

* 用AM/PM表示,而不是24小时制

* 如果小时数是单位数,则不加0,例如16:30:00,应该显示 "4:30:00 PM",而不是"04:30:00"

对于下面这段代码

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"h:mm:ss a"];
    NSLog([dateFormatter stringFromDate:[NSDate date]]);

我本以为可以满足我要求,但是在AIMS app里,却发现如下问题:

1. 如果我在iphone里的设置> 一般> 日期与时间 中 enable 24小时制,那么上面代码对于16:30:00是显示“16:30:00”,而不是"4:30:00 PM"

2. 即使我disable 24小时制,由于我的语言设置是中文,那么上面代码对于16:30:00是显示“4:30:00 下午”,而不是"4:30:00 PM"


找到的解决方案是:对NSDateFormatter实例的locale属性进行设置,使得它强制采用“en-US”的方式

dateFormatter.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];

因此,完整代码应该是

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
    [dateFormatter setDateFormat:@"h:mm:ss a"];
    NSLog([dateFormatter stringFromDate:[NSDate date]]);


你可能感兴趣的:(iOS nsdateformatter AM/PM issue)