Преобразование строки в дату теряет час - PullRequest
2 голосов
/ 28 марта 2012

Я пытаюсь преобразовать дату в строковом формате в NSDate, однако результат, похоже, вычитает час из прошедшего времени. Есть идеи почему?

-(NSDate *) convertStringToDate:(NSString *)theString {

    //init formatter
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 

    //setup the formatter
    [dateFormat setDateFormat:@"dd-MM-yyyy HH:mm"];
    [dateFormat setTimeZone:[NSTimeZone localTimeZone]];  

    //cast the date from the string
    NSDate *date = [dateFormat dateFromString:theString];


    [dateFormat release];

    return date;    
}

это тестовый звонок:

NSDate *testDate = [self convertStringToDate:@"28-03-2012 11:46"];    
NSLog(@"converted test date - %@", testDate);

я получаю вывод (это за час до времени, которое я указал в качестве аргумента):

converted test date - 2012-03-28 10:46:00 +0000

любая помощь, как я могу изменить часовой пояс, будет оценена.

Ответы [ 2 ]

4 голосов
/ 28 марта 2012

Когда вы NSLog и NSDate, оно не отображается в вашем местном часовом поясе. Это отображается в GMT. Ваш местный часовой пояс в настоящее время на 1 час опережает время по Гринвичу (возможно, из-за перехода на летнее время).

Чтобы преобразовать дату в строку, относящуюся к вашему местному часовому поясу, вы хотите использовать форматер даты (по умолчанию часовой пояс форматера даты будет установлен на ваш местный часовой пояс):

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";
NSLog(@"converted test date - %@", [dateFormatter stringFromDate:testDate]);
1 голос
/ 28 марта 2012

Вы видите на час меньше из-за вашего часового пояса, вам нужно изменить его, когда вы получите дату.

    DateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";

    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:gmt];
    NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
    [dateFormatter release];
...