Obj-C, проблема форматирования даты, выигрыш дня? - PullRequest
0 голосов
/ 19 апреля 2011

Я обнаружил ошибку в моем приложении / функции.Я передаю NSString даты.Затем функция использует NSDateFotmatterShortStyle.

Вот снимок экрана с моей функцией в отладчике.

Я хотел бы получить дату 2011-04-18 Не знаю, почемулибо добавлено 1 стр / мин, мне нужно, чтобы это было 00: 00: 00

enter image description here

Что происходит и как это исправить?

Я использую функцию MidnightUTCздесь ( Как мне создать текущую дату (или любую дату) как NSDate без часов, минут и секунд? ), чтобы избавиться от часов.

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

На самом деле я не вижу связи между методом midnightUTC и предоставленным вами кодом.

В любом случае, проблема с данным примером заключается в том, что при разборе строки 4/18/11 будут отсутствовать значения по умолчанию, такие как минуты и т. Д. И ваш текущий часовой пояс, но строка будет приниматься как время по Гринвичу, поэтому это приведет к смещение вы видите.

Решение состоит в том, чтобы установить часовой пояс для NSDateFormatter. Посмотрите на этот код, я тестировал его минуту назад, и вывод на консоль. ааа показывает нечетное смещение, bbb выглядит как положено.

NSDateFormatter *dt = [[[NSDateFormatter alloc] init] autorelease];

[dt setDateStyle:NSDateFormatterShortStyle];

NSDate *aaa = [dt dateFromString:@"4/18/11"];

NSLog(@"1a. %@", [dt timeZone]);    
NSLog(@"1b. %@", aaa);

[dt setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDate *bbb = [dt dateFromString:@"4/18/11"];

NSLog(@"2a. %@", [dt timeZone]);        
NSLog(@"2b. %@", bbb);

Консольный вывод

1a. Europe/Berlin (CEST) offset 7200 (Daylight)
1b. 2011-04-17 22:00:00 +0000
2a. GMT (GMT+00:00) offset 0
2b. 2011-04-18 00:00:00 +0000
0 голосов
/ 19 апреля 2011

используемая вами функция midnightUTC создает даты, устанавливая часовой пояс по Гринвичу, который отличается от полугодия UTC.UTC не наблюдает никаких изменений летнего / летнего времени, в то время как GMT делает это, поэтому [NSTimeZone timeZoneForSecondsFromGMT: 0] будет на час не работать по UTC примерно на полгода.

...