NSDateFormatter返回从string不正确的日期NSDateFormatter返回从st

2019-05-12 06:56发布

我有一个方法,

+ (NSDate *) convertToDateFrom:(NSString *) dateString
{
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"];

    NSDate *date = [df dateFromString:dateString];

    return date;
}

当我传球,

@"Monday, 21 November 2011 17:01" //Passed string

它返回一个错误的日期,

2011-11-21 23:14:00 +0000 // Output

我不知道我是否正确地使用这些标志或NSDateFormatter不正确我的字符串转换为日期。

难道我做错了什么?

谢谢

Answer 1:

+0000在约会结束时表示GMT。 所有时间相对被存储到GMT; 当转换的日期,使用日期格式的字符串,反之亦然,偏移到您的时区是包括在内。 您可以使用NSDateFormatter的-setTimeZone:方法来设置使用的时区。

总之,你没有做错任何事情在你的代码。 使用[df stringFromDate:date]; 看到日期是正确的。 (您也可以使用的NSDate的-descriptionWithCalendarFormat:timeZone:locale: 。)



Answer 2:

尝试使用

df stringFromDate:date

继矿工作,

NSLog(@"Date for locale %@: %@",
      [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]);

给我的输出:

Date for locale en_US: Wednesday, 26 June 2013 15:50


Answer 3:

尝试设置时区和语言环境。

[df setLocale:[NSLocale currentLocale]];
[df setTimeZone:[NSTimeZone systemTimeZone]];


文章来源: NSDateFormatter return incorrect date from string