Dateformatter给对话时间错误

我想将我的datestring转换为NSDate但它返回正确的date和错误的时间。

这是我的代码:

  NSString *dateStr = @"2013-12-20 12:10:40"; // Convert string to date object NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"]; NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr]; NSLog(@"lastUpdatedate : %@",lastUpdatedate); 

它返回这个:

 lastUpdatedate : 2013-12-20 06:40:40 +0000 

- [NSDate description] (将它传递给NSLog时调用)始终打印GMT时区中的date对象,而不是本地时区。 如果您想要date的精确string表示forms,请使用date格式化程序根据您的时区创build正确的string。

正如@Leo Natan所说, - [NSDate description]总是在GMT时区给出date。 如果你想转换成本地时区,那么使用下面的代码。

 NSString *dateStr = @"2013-12-20 12:10:40"; // Convert string to date object NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"]; NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr]; NSLog(@"lastUpdatedate : %@",[self getLocalTime:lastUpdatedate]); -(NSDate *) getLocalTime:(NSDate *)date { NSTimeZone *tz = [NSTimeZone defaultTimeZone]; NSInteger seconds = [tz secondsFromGMTForDate: date]; return [NSDate dateWithTimeInterval: seconds sinceDate: date]; } 

OUTPUT:

lastUpdatedate:2013-12-20 12:10:40 +0000

 NSString *dateStr = @"2013-12-20 12:10:40"; NSDateFormatter *dateFormatterTest = [[NSDateFormatter alloc] init]; [dateFormatterTest setDateFormat: @"yyyy-MM-dd HH:mm:ss"]; [dateFormatterTest setLocale:[NSLocale currentLocale]]; NSDate *d = [dateFormatterTest dateFromString:dateStr]; 

在你的代码中设置NSLocale,你会得到完美的结果。

你可以试试这个:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"]; [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr]; NSTimeInterval sourceGMTOffset = [[NSTimeZone systemTimeZone] secondsFromGMTForDate:lastUpdatedate]; lastUpdatedate = [lastUpdatedate dateByAddingTimeInterval:sourceGMTOffset]; NSLog(@"lastUpdatedate : %@",lastUpdatedate);