如何强制将NSDateFormatter用作12小时或24小时格式?

时间:2015-10-25 04:37:47

标签: ios swift ios9 nsdateformatter swift2.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上阅读了一些帖子,他们建议将NSDateFormatter的语言环境设置为en_US_POSIXen_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小时?

1 个答案:

答案 0 :(得分: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"