NSDateFormatter与24小时的时间

我有一个倒数计时器,从当前date/时间倒计时到一个特定的未来date/时间。 除了一个问题,它工作得很好。 我使用NSDateFormatter和dateFromStringinput将来的date。 虽然表示不支持24小时制,但是好像不能接受12小时以上的时间。 有没有办法启用24小时制支持或解决方法? 这是我的一些代码:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; NSDate *myDate = [df dateFromString:@"2010-03-14 15:00:00"]; 

谢谢

NSDateFormatter遵循date和时间模式的Unicode标准 。 24小时使用“H”小时:

 NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *myDate = [df dateFromString:@"2010-03-14 15:00:00"]; 

我有同样的问题,并使用HH只在一些设备上工作,如罗杰也validation。 最后,这是为我工作的解决scheme,我希望它适用于其他人。 find这个答案是困难的,没有它的论坛,这是字面上的试验和错误的苹果文件。

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; [dateFormatter setLocale:enUSPOSIXLocale]; NSString *dateFormat = @"dd/mm/yyyy HH:mm"; [dateFormatter setDateFormat:dateFormat]; [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; date = [dateFormatter dateFromString:string]; 

我在Swift上的解决scheme

  let formatter = NSDateFormatter() var defIdentifer = formatter.locale.localeIdentifier if !defIdentifer.hasSuffix("_POSIX") { defIdentifer = defIdentifer+"_POSIX" let locale = NSLocale(localeIdentifier: defIdentifer) formatter.locale = locale } formatter.dateFormat = "HH:mm" 

采取从苹果技术问答在NSDateFormatters

问:我正在使用NSDateFormatter来parsingInternet风格的date,但某些地区的某些用户却失败了。 我已经设置了特定的date格式string; 不应该强制NSDateFormatter独立于用户的区域设置吗?

答:没有。虽然设置date格式string似乎对大多数用户都有效,但这不是解决此问题的正确方法。 格式string有许多意想不到的地方。

这就是我在Swift中完成的:

 private let dateFormatter: NSDateFormatter = { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") dateFormatter.timeZone = NSTimeZone.init(forSecondsFromGMT: 0) return dateFormatter }() 

我最近有一个类似的问题,而不是HHNSDateFormatter在我的应用程序中忽略a (AM / PM符号)和G (循环时代名称)。

我惊讶地发现,如果我去我的设备的本地化设置,并做一些随机select,所有的怪胎都消失了,错误不能再次产生。 很奇怪。

然后我在模拟器上testing了一下。 有我的解决scheme:

在创buildNSDateFormatter ,即使使用当前语言环境,也要显式设置语言环境属性,更重要的是,不要使用[NSLocale currentLocale] ,这个systemLocale可能会被用户设置,使用systemLocale或者显式创build一个使用locale标识符的NSLocale实例。