我一直在四处寻找,但我没有看到任何可以解决这个问题的事情,所以我希望有人可以帮我解决这个问题。我想要做的是使用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,但我不确定我做错了什么。
答案 0 :(得分:20)
设置区域设置和日期格式后,您应该能够将日期转换为字符串并返回。因为您只需要时间,所以可以忽略日期部分。
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)
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)
答案 1 :(得分:2)
经过深思熟虑后,尝试了Mundi的回答,看起来Mundi正在创建一个字符串中的字符串而不创建NSDate或转换为NSDate或从NSDate转换。我也需要存储一个NSDate,所以这里你可以很容易地得到你想要的东西:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
NSDate *eventDate = [dateFormat dateFromString:[attributeDict objectForKey:@"cumulativeTime"]];
NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[timeFormat setDateFormat:@"HH:mm:ss a"];
NSString *timeString = [timeFormat stringFromDate:eventDate];
NSLog(@"EventDate: %@",timeString);
Mundi的回答是有效的,所以有人应该对他的答案进行投票,因为我投票过快而没有考虑到在“1/21/13 00:14:00”之前离开日期在这种情况下并不重要,但是他应该在它面前加上一个日期,以明确表示日期不会输出。某个人来自Web服务或其他对象的变量会有日期,那么@“HH:mm:ss a”只会抽出时间。这也有助于那些在日期或时间需要AM / PM的人。
答案 2 :(得分:0)
快捷键4 如果您想将时间与今天的日期一起使用
let todate = Date()
let formater = DateFormatter()
formater.dateFormat = "yyyy:MM:dd"
let date = formater.string(from: todate)
print(date)
let completeDate = date + ":9:00AM"
print(completeDate)
let anotherFormater = DateFormatter()
anotherFormater.dateFormat = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ"
anotherFormater.date(from: completeDate)
如果要在任何日期添加时间,则:-
let completeDate = "2019-02-15" + ":9:00AM"
print(completeDate)
let anotherFormater = DateFormatter()
anotherFormater.dateFormat = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ"
anotherFormater.date(from: completeDate)
答案 3 :(得分:-1)
我最终没有使用NSDate / NSDateFormatter,因为我无法使其正常工作。我的解决方案包括将时间字符串解析为小时,分钟和秒。我最终最终将所有内容转换为秒,并以这种方式存储它们。