我有一个方法,
+ (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没有正确地将我的字符串转换为日期。
我做错了吗?
由于
答案 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]];