NSDate但没有NSTime,如何转换字符串表示的时间(没有日期)

时间:2012-09-27 14:43:07

标签: ios nsdate nsdateformatter nstimeinterval

我的问题是我想用某种方式来表示时间(没有日期),比如我的iOS应用中的时间。从REST api我得到像“13:12:11”这样的字符串,它显示了发生的事情,我使用NSDateFormatter将NSStrings转换为NSDates但据我所知它不接受日期格式时间组件,如HH:mm:ss [编辑:你可以,见下文]

所以我的问题是 1- NSTimeInterval(而不是NSDate)我应该用什么来存储时间?
2-如何将“03:04:05”转换为来自其中一个内置框架的objective-c对象。

编辑:您可以使用“HH:mm:ss”这样的格式,它只是用2000-01-01替换日期部分 拥有一个独立于日期的时间表示仍然是非常好的。

3 个答案:

答案 0 :(得分:6)

好的,谢谢大家,这就是我最终做的事情:

NSString * timeAsString = "12:26:07";
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDate * dateZero = [dateFormatter dateFromString:@"00:00:00"];
NSDate * dc = [dateFormatter dateFromString:timeAsString];
NSTimeInterval startTime = [dc timeIntervalSinceDate:dateZero];

这不是一个优雅的解决方案,但它起作用,至少对我需要做的事情来说,

答案 1 :(得分:4)

您可以使用NSDateComponent根据时间创建日期。您可以根据当前日期或未来/过去日期为年份添加值。

NSDateComponents *component=[[NSDateComponents  alloc] init];
[component setHour:yourHour];
[component setMinute:yourMinutes];
[component setYear:yourYear];
[component setMonth:yourMonth];
[component setDay:yourDaty];
NSCalendar *calendar=[NSCalendar currentCalendar];
NSDate *date=[calendar dateFromComponents:component];

答案 2 :(得分:0)

NSDate * myDateVariable;

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];    //Not shown
[someDateLabel setText:[dateFormatter stringFromDate:[myDateVariable]]];

//OR FOR BESPOKE FORMATTING
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"'Due' EEEE d MMM yyyy, h:mm a"];
[someDateLabel setText:[dateFormatter stringFromDate:[myDateVariable]]];

//Time using users 24/12 hour preference:
[dateFormatter setDateFormat:@"HH:mm"];

//Time using 12 hour AM/PM format:
[dateFormatter setDateFormat:@"h:mm a"];

//Day and date using abbreviated words:
[dateFormatter setDateFormat:@"' ('EEE d MMM yyyy')'"];

//Day and date using full words:
[dateFormatter setDateFormat:@"' ('EEEE d MMMM yyyy')'"];