【发布时间】:2010-11-15 14:21:07
【问题描述】:
我的班级需要两个属性:startTime 和 endTime。最好使用什么类?我知道有 NSDate,但我只需要存储一个特定的时间(介于 00:00-23:59 之间),我不需要日期。这里最优雅的解决方案是什么?
【问题讨论】:
标签: iphone objective-c cocoa-touch nsdate
我的班级需要两个属性:startTime 和 endTime。最好使用什么类?我知道有 NSDate,但我只需要存储一个特定的时间(介于 00:00-23:59 之间),我不需要日期。这里最优雅的解决方案是什么?
【问题讨论】:
标签: iphone objective-c cocoa-touch nsdate
NSTimeInterval 可能已经足够了。
它将以秒为单位的时间值存储为双精度值。
例如。 5 分钟 = 300.0
【讨论】:
我相信最优雅的解决方案,也是您想要的,是 NSTimeInterval,这是 NSDate 构建在上面的原始类型。
NSTimeInterval 是double 的类型定义,是以秒为单位的时间度量。这种原始时间类型没有任何参考日期的概念。 NSDate 所做的是添加这个参考日期的概念,并将 0.0 时间锚定在 2001 年 1 月 1 日 GMT。没有什么可以阻止您发明自己的参考日期或锚点,例如“任何一天的午夜”。 p>
您可以做的是将NSTimeInterval 的两个属性添加为startTime 和endTime,并让它们都使用midnight 作为参考。或者您可以跳过endTime 并选择startTime 和duration 组合。
【讨论】:
还有NSDateComponents,“也可用于指定持续时间,例如5 小时16 分钟。”
【讨论】:
NSDate 类类似于 C# 中的 DateTime 类:两者都保存日期和时间,但它们可以相互独立。在 Cocoa 中,您将比较两个 NSDate 类:
//Create NSDate objects in the time format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSString *startTimeString = @"00:00:00"; //0 seconds
NSString *endTimeString = @"00:00:52"; //52 seconds
NSDate *startTime = [dateFormatter dateFromString:startTimeString];
NSDate *endTime = [dateFormatter dateFromString:endTimeString];
//Compare the time
BOOL date1before2 = [startTime compare:endTime] == NSOrderedAscending;
【讨论】: