我有时间:7:46 am
我想将其转换为NSDate。我这样做:
NSDateFormatter *f = [NSDateFormatter new];
[f setDateFormat:@"h:mm a"];
NSDate *sr = [f dateFromString:@"7:46 am"];
我NSLog sr
我获得了1969-12-31 22:46:00 +0000
那些时间不一样。为什么这么搞砸?
答案 0 :(得分:5)
没有。这并不奇怪。 NSDateConverter& NSDate正在这里做他们想做的工作。
您正在尝试将"7:46 am"
转换为日期。它只包含时间。字符串中未指定日期。如果没有指定日期,NSDate将默认为"1970-01-01"
(Unix纪元)。因此,在转换字符串后,您将获得日期"1970-01-01 7:46 am"
。当您尝试在 NSLog 中显示时,如果在调整timeZone偏移值后显示日期。我想你住在日本或韩国。您所在地区的偏差可能是+09:00。因此它显示减去偏移量的日期。所以你在日志中看到"1969-12-31 22:46:00 +0000"
。
您可以使用以下方法将时间设置为特定日期,可能今天。
NSString *timeStr = @"7:46 am";
NSDateFormatter *f = [NSDateFormatter new];
[f setDateFormat:@"yyyy-MM-dd"];
NSString *dateStr = [f stringFromDate:[NSDate date]]; // dateStr = 2011-06-10
dateStr = [dateStr stringByAppendingFormat:@" %@", timeStr]; // dateStr = 2011-06-10 7:46 am
[f setDateFormat:@"yyyy-MM-dd h:mm a"];
NSDate *sr = [f dateFromString:dateStr];
答案 1 :(得分:2)
您没有提供日期或时区...假设您想表达“今天上午7:42”,您可以使用此代码:
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:7];
[comps setMinute:42];
NSDate *myDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];
myDate的NSLog现在应该为您提供预期的输出(假设您今天需要@ 7:46 am)。
答案 2 :(得分:0)
由于您只指定了您希望NSDate引用的时间而不是日期,因此格式化程序使用的是默认日期(它似乎非常接近UNIX纪元)。像Julio说的那样,如果你想让NSDate参考特定日期的时间,你也应该指定当前日期。