• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - NSDateFormatter - setLocale 被忽略了吗?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:18:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试解决一个臭名昭著的问题,即当用户将定位时间设置为 12 小时而不是默认的 24 小时时,NSDateFormatter 在不需要时返回“am/pm”日期(覆盖格式字符串)

阅读后,似乎最好的解决方案是将 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"?



Best Answer-推荐答案


问题只是您如何使用 NSLog() 打印日期。这将调用 [NSDate description],它将使用用户的默认语言环境。

来自 docs (descriptionWithLocale):

If you pass nil, NSDate formats the date in the same way as the description property.

On OS X v10.4 and earlier, this parameter was an NSDictionary object. If you pass in an NSDictionary object on OS X v10.5, NSDate uses the default user locale—the same as if you passed in [NSLocale currentLocale].

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

关于ios - NSDateFormatter - setLocale 被忽略了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32737588/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap