我正在尝试将我的日期字符串转换为NSDate
,但它返回正确的日期和错误的时间。
这是我的代码:
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
答案 0 :(得分:2)
- [NSDate description]
(将其传递给NSLog
时调用)始终以GMT时区打印日期对象,而不是本地时区。如果您想要准确的字符串表示日期,请使用日期格式化程序根据您的时区创建正确的字符串。
答案 1 :(得分:2)
正如@Leo Natan所说,- [NSDate description]
总是在GMT时区给出日期。如果要转换为本地时区,请使用以下代码。
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];
}
输出:
lastUpdatedate:2013-12-20 12:10:40 +0000
答案 2 :(得分:1)
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,您将获得完美的结果。
答案 3 :(得分:0)
你可以试试这个:
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);