2014-02-19 2 views
0

У меня есть NSDate, который я хочу отобразить в форме 4:00 PM.NSDateFormatter, возвращающий AM, когда должен быть PM

NSDate *time = [object objectForKey:@"time"]; 
NSLog(@"time: %@", time); 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [NSLocale currentLocale]; 
[dateFormatter setDateFormat:@"h:mm a"]; 
timeLabel.text = [dateFormatter stringFromDate:time]; 

Бревенчатые возвращается:

2014-03-08 13:00:00 +0000 

Но timeLabel.text читает 1:00 утро, когда он должен быть вечером. Любая идея, что происходит?

+0

изменения ваша дата форматирования. вы установили его «h: mm a» сделать его «hh: mm a» – iBug

+1

Каков ваш часовой пояс? Если вы не устанавливаете часовой пояс на 'NSDateFormatter', вы будете использовать часовой пояс системы, который может вызвать смещение. – rckoenes

+0

'NSDateFormatter' имеет' currentLocale', поэтому нет необходимости его добавлять. Скорее всего, время, которое вы получаете, находится в 'UTC'. Поэтому вам нужно установить часовой пояс на 'UTC', где вы изначально создаете« время », добавленное в словаре. – Anupdas

ответ

4

Вы забыли добавить часовой пояс. Остальное в порядке. Вы должны дать форматтера часовой пояс или он будет использовать ваш местный один

также иметь в виду, что вход с NSLog ВСЕГДА печатает UTC даты

использование [formatter setTimezone:timeZoneXY]

+0

Я сделал: 'UILabel * timeLabel = (UILabel *) [cell viewWithTag: 101]; NSDate * time = [объект objectForKey: @ "time"]; NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone: [NSTimeZone timeZoneWithName: @ "America/Los_Angeles"]]; [dateFormatter setDateFormat: @ "h: mm a"]; timeLabel.text = [dateFormatter stringFromDate: time]; ' но он все еще печатает AM. – Spenciefy

+0

и какая дата? –

+0

Америка/Los_Angeles - GMT-7? 8? 9? ... если ваше время ввода - UTC, это не сработает либо –

0
NSDate *time = [object objectForKey:@"time"]; 
NSLog(@"time: %@", time); 

Ваш формат времени с переменным временем имеет формат 24 часа. таким образом он отображает NSLog 13.00.

После этого вы должны использовать в преобразователь 12-часовой формат тот способ его отображения утра/вечера стилю

[dateFormatter setDateFormat:@"h:mm a"]; 

Примечание:

HH - Captial буква Н обозначают 24-часовой формат

чч - маленькая буква h обозначается 12-часовым форматом

+0

даст то же самое, часовой пояс отсутствует –

+0

@ Daij-Djan Это обман, хотя на это было ответили 35+ минут ранее? Я думаю, что у вас есть это в обратном направлении. Кроме того, вы не должны быть downvoting только потому, что его ответ не согласуется с вашим (я полагаю, это вы, что downvoted?) – trojanfoe

+0

@trojanfoe проверить мой обновленный ответ – codercat

0

Вы можете использовать следующий код:

NSString *[email protected]"17-02-2014 05:00 PM"; 
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm a"]; 
NSDate *datetoday=[dateFormatter dateFromString:str]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"]; 
NSString *strdate=[dateFormatter stringFromDate:datetoday]; 
NSLog(@"%@",strdate); 
+0

даст то же самое, часовой пояс отсутствует –

+0

его проблема отображается в текстовом поле –

Смежные вопросы