2012-01-09 57 views
6

我有一个方法返回不正确的日期,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 

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

我做错了什么?

感谢

+1

嗯,首先它返回正确的日期,只是错误的时间。如果你真的在17:01喂食并回到23:14,那么你可能会看到错误的NSDate对象,因为没有合理的时区设置会产生该偏移量。 – 2012-01-09 03:56:35

回答

12

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

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

+0

当我问descriptionWithLocale时,它看起来像一个错误,它潜入我的正确结果,很有趣! “ – doNotCheckMyBlog 2012-01-09 04:00:26

+1

”description“(如果您只是将NSDate对象记录为对象,则默认获得)显示UTC时间。 – 2012-01-09 04:03:17

+0

我无法得到确切的时间,但日期是正确的。我使用这个日期EkEvent和存储事件到iPhone中的默认日历。在这种情况下,时间不匹配。请帮助我... – IKKA 2013-03-20 15:18:20

-1

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

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

我试过,但仍然返回“2011-11-21 23:14:00 +0000” – doNotCheckMyBlog 2012-01-09 03:49:04

+2

如果我可能会提示一些灯光阅读:http://developer.apple.com/library/mac/#documentation/Cocoa/ Conceptual/DatesAndTimes/DatesAndTimes.html#// apple_ref/doc/uid/10000039i – 2012-01-09 03:57:54

+0

当我问descriptionWithLocale时,它似乎就像一个bug,它给了我正确的结果,好笑!结果的结果是不同的描述和描述WitLocale ...一个小时的差异:( – doNotCheckMyBlog 2012-01-09 04:01:43

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