0

可能重复:
将日期从 [NSDate 日期] 缩短几个小时

我想使用实际日期计算实际当天的午夜时间,代码如下:

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
 NSDate *today = [NSDate date];
    NSString *todayStr = [NSString stringWithFormat:@"%@ 12:59 PM",[formatter stringFromDate:today]];
NSLog(@"%@",todayStr);
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
NSDate *midNight = [formatter dateFromString:todayStr];
NSLog(@"%@",midNight);

但我得到的日志是:

23/01/2013 12:59 PM
2013-01-23 10:59:00 +0000

为什么midNight不是实际的午夜,为什么它的格式与 不同formatter

4

2 回答 2

1

您使用日期格式化程序计算的午夜将本地化考虑在内。

因此,您生活在 UTC+2 时区。

您可以为 UTC 添加一个“Z”。

在http://www.w3.org/TR/NOTE-datetime查看更多信息

于 2013-01-23T17:17:17.773 回答
0

这将计算您当地时区的午夜。

NSDate *d = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comps = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:d];
d = [cal dateFromComponents:comps];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
NSString *dateStr = [formatter stringFromDate:d];
NSLog(@"%@", dateStr);

打印 23/01/2013 12:00 AM

于 2013-01-23T18:30:05.593 回答