我有一个倒数计时器,从当前日期/时间到特定的未来日期/时间倒计时。除了一个问题外,它工作得很好。我使用NSDateFormatter和dateFromString输入未来日期。它似乎无法接受超过12的任何时间(小时),虽然表明它不支持24小时制。有没有办法启用24小时时钟支持或解决方法?以下是我的一些代码:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSDate *myDate = [df dateFromString:@"2010-03-14 15:00:00"];
由于
答案 0 :(得分:65)
NSDateFormatter遵循Unicode standard for date and time patterns。在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"];
答案 1 :(得分:53)
我遇到了同样的问题并且使用HH仅在某些设备上工作,例如Roger也验证过。最后,这是对我有用的解决方案,我希望它适用于其他人。找到这个答案是困难的,没有论坛,苹果文档后面的字面上是试验和错误。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
NSString *dateFormat = @"dd/MM/yyyy HH:mm"; //MM for month, mm for minutes
[dateFormatter setDateFormat:dateFormat];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
date = [dateFormatter dateFromString:string];
答案 2 :(得分:10)
我对Swift的解决方案:
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"
答案 3 :(得分:4)
取自NSDateFormatters上的Apple Technical Q&A
问:我正在使用NSDateFormatter来解析互联网风格的日期,但某些地区的某些用户会失败。我已经设置了一个特定的日期格式字符串;不应该强迫NSDateFormatter独立于用户的区域设置工作吗?
答:不会。虽然设置日期格式字符串似乎适用于大多数用户,但这不是解决此问题的正确方法。有许多地方格式字符串以意想不到的方式运行。
这就是我在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
}()
答案 4 :(得分:1)
当用户在iPhone上设置12小时格式而不更改区域设置和设置时区时,从24小时字符串获取NSDate的目标C版本:
SetState(Node, NewState);