2013-09-10 3 views
2

Сервер возвращает мне правильную дату & времени. Часовой пояс в Нью-Йорке.NSTimeZone timeZoneWithName: работает не правильно

2013-09-10 05:37:07 +0000 (правильное время, когда комментарий был опубликован)

Вот как отформатировать его в приложении:

[format setDateFormat:@"dd MMM, yyyy HH:mm"]; 

[format setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; 

И в результате у меня

10 sept, 2013 01:37 

Что неправильно ?

UPD

Код

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; 
    [format setDateFormat:@"dd MMM, yyyy HH:mm"]; 

    NSString *stringDate = [format stringFromDate:Date]; //Date is "2013-09-10 05:37:07 +0000" 
    //stringDate is "10 sept, 2013 01:37" 

ответ

3

Мой текущее время (в этот момент) является: время 3:00 PM

в Нью-Йорке (на тот момент) является: 8:00 утра

Решение:

NSDate *date = activityDate; // Server sends me the date: 2013-09-10 09:00:00 +0000 
NSString *dateFormat = @"dd MMM, yyyy HH:mm"; 
//Then the transformation comes here 
NSDateFormatter* newYorkDf = [[NSDateFormatter alloc] init]; 
[newYorkDf setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; 
[newYorkDf setDateFormat:dateFormat]; 

NSDateFormatter* gmtDf = [[NSDateFormatter alloc] init]; 
[gmtDf setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 
[gmtDf setDateFormat:dateFormat]; 
NSDate *gmtDate = [gmtDf dateFromString:[newYorkDf stringFromDate:date]]; 

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateFormat:dateFormat]; 
NSString *stringDate1 = [format stringFromDate:gmtDate]; 
self.labelDate.text = stringDate1; // Returns me: 10 Sept, 2013 8:00 
0

Вы сказали, что "возвращается сервер". Не могли бы вы рассказать нам больше о том, как вы получаете свою первоначальную дату? Возможно, вы создали дату UTC, а затем форматировали его так, как если бы это был Нью-Йорк (восточный часовой пояс). Пасха TZ - UTC-5. Я предполагаю, что у вас есть переход на летнее время, начиная с 5:37 - 5 часов, давая 0:37.

Если вы публикуете, как вы строите исходную дату, которую вы форматируете с показанным кодом, я мог бы, вероятно, получить более конкретную информацию.

+0

Спасибо за ваш ответ! Собственно, человек-сарвер говорит, что он строит дату UTC. –

+0

Но когда я устанавливаю timeZoneWithAbbreviation: @ «UTC» - разница с NY составляет 6 часов (должно быть 7) –

+0

Я вижу, что сервер возвращает мне неправильную дату –

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