我一直在四处寻找,但我没有看到任何解决这个问题的东西,所以我希望有人能帮我解决这个问题。我想做的是使用 NSDate 变量(在核心数据中)来存储时间,而不是日期和时间,而只是 HH:MM:SS 格式的时间;
在查看了 NSDateFormatter 类引用和提供的示例代码后,我能够对其进行调整,并认为我的代码应如下所示:
NSDateFormatter *timeOfArrival = [[NSDateFormatter alloc] init];
[timeOfArrival setTimeStyle:NSDateFormatterLongStyle];
[timeOfArrival setDateStyle:NSDateFormatterNoStyle];
[timeOfArrival setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
NSString *etaStr = [attributeDict objectForKey:@"cumulativeTime"];
NSLog(@"%@", etaStr);
checkpoint.eta = [timeOfArrival dateFromString:etaStr];
直到我尝试从我的字符串创建我的 NSDate 对象的最后一行之前的所有内容都有效,但在那之后,checkpoint.eta 仍然为零。
etaStr 正确输出了我的预期值,例如 00:14:00,但我不确定我做错了什么。
最佳答案
设置语言环境和日期格式后,您应该能够在日期和字符串之间来回转换。因为您只需要时间,所以可以忽略日期部分。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[[NSLocale alloc]
initWithLocaleIdentifier:@"en_US"] autorelease]];
[formatter setDateFormat:@"HH:mm:ss"];
NSString *etaStr = @"00:14:00";
NSDate *generatedDate = [formatter dateFromString:etaStr];
NSLog(@"%@", [formatter stringFromDate:generatedDate]);
[formatter release];
输出
00:14:00
快速版本
是时候为 swift 更新这个答案了:
var formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")
formatter.dateFormat = "HH:mm:ss"
let etaString = "00:14:00"
let generatedDate = formatter.dateFromString(etaString)!
let generatedString = formatter.stringFromDate(generatedDate)
println(generatedString)
swift 3版本
var formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.dateFormat = "HH:mm:ss"
let etaString = "00:14:00"
let generatedDate = formatter.date(from: etaString)!
let generatedString = formatter.string(from: generatedDate)
print(generatedString)
关于iphone - NSDate/NSDateFormatter - 只存储时间,不存储日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153962/