Dateformatter выдает неправильное время в разговоре

Я пытаюсь преобразовать строку даты в NSDate, но возвращает правильную дату и неправильное время.

Это мой код:

    NSString *dateStr = @"2013-12-20 12:10:40";

    // Convert string to date object
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

    NSLog(@"lastUpdatedate : %@",lastUpdatedate);

Он возвращает это:

lastUpdatedate : 2013-12-20 06:40:40 +0000

person Community    schedule 23.12.2013    source источник
comment
время 24 или 12 часовой формат ??   -  person Leena    schedule 23.12.2013
comment
затем предложит вам преобразовать дату в строку и проверить журнал...   -  person Leena    schedule 23.12.2013


Ответы (4)


- [NSDate description] (который вызывается при передаче его в NSLog) всегда печатает объект даты в часовом поясе GMT, а не в вашем местном часовом поясе. Если вам нужно точное строковое представление даты, используйте средство форматирования даты, чтобы создать правильную строку в соответствии с вашим часовым поясом.

person Leo Natan    schedule 23.12.2013

Как сказал @Leo Natan, - [NSDate description] всегда указывает дату в часовом поясе по Гринвичу. Если вы хотите преобразовать в местный часовой пояс, используйте следующий код.

NSString *dateStr = @"2013-12-20 12:10:40";

// Convert string to date object
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

NSLog(@"lastUpdatedate : %@",[self getLocalTime:lastUpdatedate]);



-(NSDate *) getLocalTime:(NSDate *)date {
    NSTimeZone *tz = [NSTimeZone defaultTimeZone];
    NSInteger seconds = [tz secondsFromGMTForDate: date];
    return [NSDate dateWithTimeInterval: seconds sinceDate: date];
}

ВЫВОД:

последнее обновлениедата : 2013-12-20 12:10:40 +0000

person MilanPanchal    schedule 23.12.2013
comment
Как получить только 12:10:40 (не всю дату, как 2013-12-20 12:10:40 +0000) и в 24-часовом формате? - person Natasha; 15.01.2016
comment
@natasha HH:mm:ss дает формат данных через 24 часа, а hh:mm:ss дает формат данных через 12 часов. - person MilanPanchal; 16.01.2016

NSString *dateStr = @"2013-12-20 12:10:40";
NSDateFormatter *dateFormatterTest = [[NSDateFormatter alloc] init];
[dateFormatterTest setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
[dateFormatterTest setLocale:[NSLocale currentLocale]];
NSDate *d = [dateFormatterTest dateFromString:dateStr];

Установите NSLocale в свой код, и вы получите отличный результат.

person Nirmalsinh    schedule 23.12.2013
comment
локаль по умолчанию - текущая локаль, и это бесполезно. - person chancyWu; 23.12.2013
comment
Проблема не в том, что он не установил локаль. Проблема в том, что он не использовал средство форматирования даты. - person Leo Natan; 23.12.2013

Вы можете попробовать это:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

NSTimeInterval sourceGMTOffset = [[NSTimeZone systemTimeZone] secondsFromGMTForDate:lastUpdatedate];

lastUpdatedate = [lastUpdatedate dateByAddingTimeInterval:sourceGMTOffset];

NSLog(@"lastUpdatedate : %@",lastUpdatedate);
person Bhumeshwer katre    schedule 23.12.2013
comment
Это изменяет проанализированный объект NSDate и является неверным. - person Leo Natan; 23.12.2013
comment
@LeoNatan, я тебя не понял. Пожалуйста, подробнее. - person Bhumeshwer katre; 23.12.2013