NSTime: Почему [дата NSDateComponent] возвращает ноль здесь?
Я хочу конвертировать NSDate из одного часового пояса в другой.
Вот мой код:
NSDate* convertTime(NSDate* fromDate, NSTimeZone* fromTimeZone, NSTimeZone* toTimeZone) {
if (fromTimeZone == toTimeZone) {
return fromDate;
}
NSCalendarUnit val = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour| NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitTimeZone;
NSCalendar* dupCal = [[NSCalendar currentCalendar] copy];
[dupCal setTimeZone:toTimeZone];
NSDateComponents *dupComponents = [dupCal components:val fromDate:fromDate];
return [dupComponents date]; // <- Why return nil?
}
int testTimeZone() {
NSDate* res = convertTime([NSDate date], [NSTimeZone defaultTimeZone], [NSTimeZone timeZoneWithName:@"America/New_York"]);
NSLog(@"convertTime: %@", res);
return 0;
}
В окне вывода я вижу эту распечатку:
2014-02-15 11:15:18.040 MyApp[28742:70b] convertTime: (null)
По какой-то причине return [dupComponents date];
всегда возвращайте ноль, хотя я ясно вижу в отладчике, что он правильно инициализирован. Он содержит значения, которые я ожидаю.
Printing description of dupComponents:
<NSDateComponents: 0x100112260>
TimeZone: America/New_York (EST) offset -18000
Calendar Year: 2014
Month: 2
Leap month: no
Day: 14
Hour: 19
Minute: 19
Second: 29
Почему это так?
1 ответ
Решение
Я нахожу решение.
Мне нужно установить объект календаря в NSDateCompoent объект перед вызовом date
:
NSDateComponents *dupComponents = [dupCal components:val fromDate:fromDate];
[dupComponents setCalendar:dupCal]; // THIS IS THE SOLUTION
return [dupComponents date];