NSDateFormatter - setLocale被忽略了吗?

时间:2015-09-23 10:49:55

标签: ios objective-c

我试图解决臭名昭着的问题,即NSDateFormatter返回&am 39; am / pm'当用户的定位时间设置为12小时而不是默认的24小时时,不需要的日期(覆盖格式字符串)

在阅读之后,似乎最好的解决方案是将dateFormatter语言环境设置为en_US_POSIX(我们将其用于API调用,因此需要忽略任何用户首选项)

然而,它似乎被忽略了?

我有一个类别如下:

@implementation NSDateFormatter (Locale)

- (id)initWithSafeLocale {
    static NSLocale* en_US_POSIX = nil;
    self = [self init];
    if (en_US_POSIX == nil) {
      en_US_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    }
    [self setLocale:en_US_POSIX];
    return self;    
}

@end

然后我打电话给:

sharedInstance.dateFormatter = [[NSDateFormatter alloc] initWithSafeLocale];
[sharedInstance.dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];

但是,日期仍然打印为

2015-09-28 11:00:00 pm +0000

我做错了什么似乎忽略了setLocale?

参考:What is the best way to deal with the NSDateFormatter locale "feechur"?

1 个答案:

答案 0 :(得分:2)

问题在于您使用@keyframes bner_01 { 0% { transform: rotate(-5.9deg) translateX(0%); } 100% { transform: rotate(-5.9deg) translateX(-50%); } } 打印日期的方式。这将调用将使用用户默认语言环境的NSLog()

来自docs[NSDate description]):

  

如果您通过descriptionWithLocalenil会以与日期相同的方式格式化日期   NSDate财产。

     

在OS X v10.4及更早版本中,此参数是description对象。   如果您在OS X v10.5上传入NSDictionary对象,则NSDictionary使用。{   默认用户区域设置 - 与传入NSDate时相同。

相反,您应该使用日期格式化程序来打印格式化的字符串。