1

我的 iOS 应用程序会将时间从时间戳格式化为时间字符串。我想在应用程序中提供一个设置,它将覆盖系统的 12/24 小时格式。

我尝试了什么:

 self.timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle;
 let locale:NSLocale = NSLocale.currentLocale();
 if(Constants.isFormat12()){
     timeFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("hh:mm", options: 0, locale: locale);
 }else{
     timeFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("HH:mm", options: 0, locale: locale);
 }

如果系统低于 12 小时格式,但不是 24 小时格式,此代码将起作用。

我在 stackoverflow 上阅读了一些帖子,他们建议设置 to 的语言环境,NSDateFormatter以便en_US_POSIX时间en_GB格式为 12 或 24 小时格式。

    if(Constants.isFormat12()){
        timeFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX");
        timeFormatter.dateFormat = "hh:mm a";
    }else{
        timeFormatter.locale = NSLocale(localeIdentifier: "en_GB");
        timeFormatter.dateFormat = "HH:mm";
    }

但是,12 小时格式将显示AMPM,而不是不同语言的本地化版本“AM”和“PM”,例如中文的“上午”和“下午”。

有什么方法可以强制 NSDateFormatter 使用 12/24 小时吗?

4

1 回答 1

1

有什么问题?

import Foundation

let formater = NSDateFormatter()
formater.setLocalizedDateFormatFromTemplate("hh.mm")
let time = NSDate()           // "17 Nov 2015 14:42"
formater.stringFromDate(time) // "2:42 PM"
formater.setLocalizedDateFormatFromTemplate("HH:mm")
formater.stringFromDate(time) // "14:42"

.. 中国人

import Foundation

let formater = NSDateFormatter()
formater.setLocalizedDateFormatFromTemplate("hh.mm")
let time = NSDate()           // "17 Nov 2015 15:05"
formater.locale = NSLocale(localeIdentifier: "zh_CN")
formater.stringFromDate(time) // "3:04 下午"
formater.setLocalizedDateFormatFromTemplate("HH:mm")
formater.stringFromDate(time) // "15:05"
于 2015-11-17T13:43:33.660 回答