Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何强制将NSDateFormatter用作12小时或24小时格式?_Ios_Swift_Ios9_Nsdateformatter_Swift2.1 - Fatal编程技术网

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

Ios 如何强制将NSDateFormatter用作12小时或24小时格式?,ios,swift,ios9,nsdateformatter,swift2.1,Ios,Swift,Ios9,Nsdateformatter,Swift2.1,我的iOS应用程序将时间从时间戳格式化为时间字符串。 我想在应用程序中提供一个设置,它将覆盖系统的12/24小时格式 我尝试的是: self.timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle; let locale:NSLocale = NSLocale.currentLocale(); if(Constants.isFormat12()){ timeFormatter.dateFormat = NSDateFor

我的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_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小时格式将显示
AM
PM
,而不是不同语言的本地化版本“AM”和“PM”,例如上午" & "下午" 用中文

有没有办法强制NSDateFormatter使用12/24小时?有什么问题

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"

FWIW,我认为你不应该为此设置应用程序。让用户在设置中选择他们喜欢的设备设置,然后使用
timeFormatter.timeStyle=.ShortStyle
(无
locale
override;无
dateFormat
override)我不想生活在这样一个世界里,在我使用的每个应用程序中,我都在管理12小时和24小时的时钟设置。@Rob如果我在应用程序第一次启动时遵循12/24小时的设置,但允许他们在之后进行选择,那会怎么样?;)嘿,做你想做的事,但这似乎是一个令人困惑的情况,用户不再知道w在这里,他们应该更改他们的时钟本地化首选项。如果他们运行了应用程序,然后更改了设置中的值,该怎么办?为用户提供两个不同的位置来指定12/24小时的时钟设置只会让人感到困惑,IMHO。我建议不要使用特定于应用程序的12/24小时时钟设置,除非有什么问题独特的应用程序,您可以合理地期望用户说,例如,“我希望24小时时钟无处不在,但在这一个应用程序中除外”(反之亦然)。