【问题标题】:Different day formatting while using NSDateFormatter on OS X Mavericks and Yosemite在 OS X Mavericks 和 Yosemite 上使用 NSDateFormatter 时的不同日期格式
【发布时间】:2015-02-06 13:16:05
【问题描述】:

给定以下程序:

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSDateFormatter *f = [[NSDateFormatter alloc] init];
        f.timeStyle = NSDateFormatterNoStyle;
        f.dateStyle = NSDateFormatterMediumStyle;
        f.calendar = [NSCalendar autoupdatingCurrentCalendar];
        f.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
        f.locale   = [NSLocale localeWithLocaleIdentifier:@"ru"];

        NSDate *feb_01_2012 = [NSDate dateWithTimeIntervalSince1970:1328054400];

        NSLog(@"%@", [f stringFromDate:feb_01_2012]);
    }
}

在 OS X Yosemite 上编译时会产生以下输出:

2014-12-08 22:31:49.109 Untitled[14149:1398844] 1 февр. 2012 г.

然而,当在 OS X Mavericks 上编译时,它产生的输出略有不同(注意当天的零填充):

2014-12-08 22:27:01.890 formatter[54709:507] 01 февр. 2012 г.

任何想法为什么会发生这种情况?错误仅针对 ru 语言环境显示:-\

更新:找到了一种在两台机器上获得相同数量的零的方法。使用+dateFormatFromTemplate:options:locale: 会得到预期的结果:

NSLocale *l = [NSLocale localeWithLocaleIdentifier:@"ru"];
f.locale = l;
f.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"yMMMd"
                                               options:0
                                                locale:l];

【问题讨论】:

    标签: osx-mavericks nsdateformatter osx-yosemite


    【解决方案1】:

    也许尝试更严格地指定俄语语言环境。例如[NSLocale localeWithLocaleIdentifier:@"ru_RU"];。我可以假设标识符为 ru 的语言环境默认为不同 OS X 版本上的不同语言环境。虽然还是很奇怪……

    提醒一下,您可以使用 [NSLocale availableLocaleIdentifiers] 查看所有可用语言环境的列表。

    【讨论】:

    • 尝试了这个标识符,但没有成功
    【解决方案2】:

    也许不同的中间日期格式设置?

    【讨论】:

    • 不。两台机器上的偏好相同。
    • 找到了解决方案,但没有解释为什么会发生这种情况,请查看更新。
    • 无论如何这应该不会影响它,因为 Roman 明确地为格式化程序设置了区域设置并且他不使用 currentLocale。所以他在机器上的语言环境应该不会产生任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2013-12-02
    • 2015-11-28
    相关资源
    最近更新 更多