我很难找到一种方法来使用NSDate仅用于时间目的。 我试图做以下代码:
- (void)awakeFromInsert
{
NSDateComponents *comps = [[NSDateComponents alloc] init];
comps.minute = 45;
comps.second = 0;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
self.periodDuration = [calendar dateFromComponents:comps];
NSLog(@"periodDuration: %@",self.periodDuration);
comps = [[NSDateComponents alloc] init];
comps.hour = 8;
comps.minute = 0;
self.firstPeriodStartTime = [calendar dateFromComponents:comps];
NSLog(@"firstPeriodTime: %@",self.periodDuration);
}
但我得到的结果是:
periodDuration: 0001-12-31 22:24:04 +0000
firstPeriodTime: 0001-12-31 22:24:04 +0000
我期待的结果:
periodDuration: 45:00
firstPeriodTime: 08:00
我做错了什么?我怎样才能解决这个问题? 谢谢。
答案 0 :(得分:12)
日期日志会误导您,如果您只使用少量组件形成日期,则无法获得唯一标识日期和时间的正确日期实例。
如果您尝试使用此代码剪切,您可以发现,如果您只是将日期转换回字符串,它就像您期望的那样
NSDateComponents *comps = [[NSDateComponents alloc] init];
comps.minute = 45;
comps.second = 0;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *periodDate = [calendar dateFromComponents:comps];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss"];
NSLog(@"periodDuration: %@",[dateFormatter stringFromDate:periodDate]);
comps = [[NSDateComponents alloc] init];
comps.hour = 8;
comps.minute = 0;
NSDate *firstPeriodDate = [calendar dateFromComponents:comps];
[dateFormatter setDateFormat:@"HH:mm"];
NSLog(@"firstPeriodTime: %@",[dateFormatter stringFromDate:firstPeriodDate]);
periodDuration:45:00
firstPeriodTime:08:00
答案 1 :(得分:3)
您可以使用NSDateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
NSLog(@"%@",[dateFormatter stringFromDate:[NSDate date]]);
答案 2 :(得分:3)
使用NSTimeInterval
(基本上是包含秒数的双精度型)。将其存储在CoreData
:
[NSNumber numberWithDouble:myTimeInterval];
格式化:如果您希望显示超过24小时,请使用:
NSUInteger seconds = (NSUInteger)round(myTimeInterval);
NSString *formattedDate = [NSString stringWithFormat:@"%02u:%02u:%02u",
seconds / 3600, (seconds / 60) % 60, seconds % 60];
NSLog(@"%@", formattedDate);
如果您不想超过24小时,可以再次使用NSDate
和NSDateFormatter
:
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:myTimeInterval];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSString *formattedDate = [dateFormatter stringFromDate:date];
NSLog(@"%@", formattedDate);
答案 3 :(得分:0)
NSString *timeString;
timeString = [NSDateFormatter localizedStringFromDate:[NSDate date]
dateStyle:NSDateFormatterNoStyle
timeStyle:NSDateFormatterMediumStyle];
下午12:03:54