iOS NSDateFormatter не может правильно разобрать час - PullRequest
1 голос
/ 24 июня 2011

Первый код:

NSString* dateTimeString = [NSString stringWithFormat:@"%@%@", [aDictionary objectForKey:@"date"], [aDictionary objectForKey:@"time"]];

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];    
[dateFormatter setDateFormat:@"yyyyMMddHHmm"];

NSDate* dsate = [dateFormatter dateFromString:dateTimeString];

Значение строки dateTimeString равно «201106242204»

однако dsdate получает неверное значение, в отладчике оно показывает: 2011-06-24 19:04:00 + 0000

как видите, время должно быть 22, а не 19. Я уже потратил немало времени на это. Пробовал установить часовой пояс, локаль и т. Д. И т. Д., Но ничто не имеет никакого эффекта.

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

Имейте в виду, что NSDateFormatter поддерживает локали . Это означает, что даже если вы укажете строку формата даты, если текущая локаль на устройстве имеет другой формат для строки, которую вы ей предоставили, она переопределит строку, предоставленную вами в качестве средства форматирования. Каково ваше смещение UTC в вашем текущем местоположении? Поскольку NSDateFormatter всегда дает время UTC, если ваше смещение равно -6, оно возвращает вам правильное значение, просто в другом часовом поясе. Одна из особенностей NSDateFormatter мне очень не нравится. Вы можете получить желаемый результат, вызвав setTimeZone: на устройстве форматирования даты.

Попробуйте вызвать -descriptionWithCalendarFormat: timeZone: locale: для проанализированного экземпляра NSDate, передав вашу локаль и часовой пояс. Мне любопытно, если он выдаст желаемый результат.

1 голос
/ 25 июня 2011

Итак, наконец-то я решил это. Как:

NSString* dateTimeString = [NSString stringWithFormat:@"%@%@", [aDictionary objectForKey:@"date"], [aDictionary objectForKey:@"time"]];

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSTimeZone* normalTimeZone = [NSTimeZone timeZoneWithName:@"EET"];

[dateFormatter setDateFormat:@"yyyyMMddHHmm"];

NSDate* date = [dateFormatter dateFromString:dateTimeString];
NSDate* correctedDate = [date dateByAddingTimeInterval:[normalTimeZone secondsFromGMT]];

Я думаю, что у Какао или iOS должен быть хотя бы API, который пытается действовать умно.

...