Преобразование NSString в NSDate с am/pm и часовым поясом

Мой ввод NSString равен 2017-01-11 5:33:55 am +0000. И мои коды:

    date = @"2017-01-11 5:33:55 am +0000";
    uploadFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss a Z";
    [uploadFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
    NSDate *theDate = [uploadFormatter dateFromString:date];

Но возвращаемые NSDate всегда равны 2017-01-11 0:33:55 UTC независимо от часа ввода. Это означает, что если ввод равен 2017-01-11 3:33:55 am +0000, результат будет таким же.

Кто-нибудь сталкивался с проблемой раньше? Любая идея будет оценена.


person Laurence Fan    schedule 11.01.2017    source источник
comment
HH - это четыре часа в 24-часовом формате, но, поскольку у вас есть am/pm, это явно 12-часовой формат. Так что хотя бы поменяйте HH на hh.   -  person Larme    schedule 11.01.2017
comment
@Larme это точно решит проблему. Не могли бы вы помочь опубликовать комментарий в качестве ответа, чтобы я мог его принять? Большое спасибо! Это спасает мне жизнь.   -  person Laurence Fan    schedule 11.01.2017


Ответы (2)


HH - это четыре часа в 24-часовом формате, но, поскольку у вас есть «am» / «pm», это явно 12-часовой формат. Замените HH на hh в dateFormat.

Имейте в виду, что документ доступен здесь для формата, который для iOS7+: здесь.

person Larme    schedule 11.01.2017

Используйте этот формат даты:

[uploadFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss a Z"];
person Sunny    schedule 11.01.2017