NSDate / NSDateFormatter – 只存储时间,而不是date?

我一直在四处张望,但我还没有看到任何解决这个问题,所以我希望有人能帮我清楚这一点。 我想要做的是使用一个NSDatevariables(核心数据)来存储时间,而不是date和时间,但只是时间的格式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]; 

直到最后一行,我尝试从我的string创build我的NSDate对象的作品,但之后,checkpoint.eta仍然是零。

例如,etaStr正确输出我的期望值,00:14:00,但是我不确定我在做什么错误。

设置区域设置和date格式后,您应该能够从date转换为string,并返回。 因为你只需要时间,你可以忽略date部分。

 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) 

经过一番思考,并尝试蒙迪的答案,它看起来像蒙迪从一个string创build一个string,而不创build一个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的回答是有效的,所以有人应该投票回答,因为我投下的太快而没有考虑到离开date@“1/21/13 00:14:00”在这种情况下并不重要,但他应该已经在它前面写了一个date来说明date不是输出。 有人从Web服务或其他对象的variables会有date,那么@“HH:mm:ss a”只会抽出时间。 这也帮助那些需要上午/下午在他们的date或时间的人。

我结束了不使用NSDate / NSDateFormatter,因为我无法让它正常工作。 我的解决scheme包括parsing我的时间string到几小时,几分钟和几秒钟。 我最终最终把所有东西都转换成秒,然后以这种方式存储它们。