NSDateFormatter从字符串返回错误的日期

时间:2012-01-09 03:38:02

标签: objective-c ios nsdate nsdateformatter

我有一个方法,

+ (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没有正确地将我的字符串转换为日期。

我做错了吗?

由于

3 个答案:

答案 0 :(得分:12)

日期末+0000表示GMT。所有日期都相对于GMT存储;当您使用日期格式化程序将日期转换为字符串或反之亦然时,将包含您的时区的偏移量。您可以使用NSDateFormatter的-setTimeZone:方法设置使用的时区。

简而言之,您的代码中没有任何错误。使用[df stringFromDate:date];查看日期是否正确。 (您也可以使用NSDate的-descriptionWithCalendarFormat:timeZone:locale:。)

答案 1 :(得分:0)

尝试使用

df stringFromDate:date

以下是我的工作,

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

给了我输出:

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

答案 2 :(得分:-1)

尝试设置时区和区域设置。

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