以下代码
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setFirstWeekday:2];
[cal setMinimumDaysInFirstWeek:4];
NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setYear: 2012];
[comp setMonth:3];
[comp setDay: 12];
NSDate *date = [cal dateFromComponents:comp];
NSLog(@"date:%@",date);
日志:
date:2012-03-11 23:00:00 +0000
任何想法,为什么会发生这种情况以及如何避免 TNX
答案 0 :(得分:2)
我假设您在本地使用CET时区。这就是[NSCalendar currentCalendar]
将用作时区的原因。
使用NSLog转储NSDate
时,您将以原始UTC格式获取日期。要使用本地格式打印日期,请查看NSDateFormatter
类,该类具有timeZone
属性:
....
NSDate *date = [cal dateFromComponents:comp];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
fmt.timeZone = [NSTimeZone defaultTimeZone]; // Probably not required
NSLog(@"date:%@", [fmt stringFromDate:date]);
答案 1 :(得分:2)
设定时区
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
答案 2 :(得分:2)
当您致电dateFromComponents:
时,您将丢失所有时区和日历信息,并留下一个NSDate对象,其中包含您的日期组件所代表的时刻,但没有其他内容。在NSDate对象上使用NSLog
时,该时刻将转换为UTC时间并呈现为人类可读的字符串。
您需要提供有关您要实现的目标的更多信息,以便能够回答您关于如何避免此问题的第二个问题。