Mit*_*try 6 iphone nstimezone nscalendar ios
这段代码
NSCalendar *calendar =[NSCalendar currentCalendar];
[gregorian setTimeZone:tz];
NSLog(@"%@", [gregorian timeZone]);
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[NSDate date]];
[comp setDay:info.day];
[comp setMonth:info.month];
[comp setYear:info.year];
[comp setHour:info.hour];
[comp setMinute:info.minute];
[comp setSecond:info.second];
[comp setTimeZone:tz];
NSLog(@"%@", [comp timeZone]);
NSLog(@"%@", [gregorian dateFromComponents:comp]);
Run Code Online (Sandbox Code Playgroud)
在控制台中显示以下内容:
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
Run Code Online (Sandbox Code Playgroud)
因此,正确指定了日历和组件的时区,但[gregorian dateFromComponents:comp]返回带有错误时区(GMT)的NSDate值.
我需要纠正什么才能获得合适的时区?
你看到的输出是完全正常的.如果您NSDate直接NSLog一个对象,您将获得该description方法返回的任何内容,这是日期的GMT表示(但不是刻在石头上).
NSDate对象不受时区限制.A NSDate表示从参考日期开始测量的绝对时刻.例如,在撰写本文时,当前日期类似于337035053.199801(自参考日期起的秒数),可以表示为2011-09-06 20:50:53 GMT或2011-09-06 22:50:53 CEST.两者都是同一日期的不同人类可读表示.
总之,您需要什么才能获得合适的时区?您需要使用在任何您喜欢的时区NSDateFormatter获取您的字符串表示NSDate.