将NSDate转换为NSString是好的,但反向是错误的

时间:2013-12-26 11:39:29

标签: ios objective-c nsdate nsdateformatter

我想通过NSDateFormatter将UTC时间更改为本地时间。

但它没有达到预期效果。

-(NSDateFormatter *)df
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
    dateFormatter.timeZone = [NSTimeZone defaultTimeZone];

    return dateFormatter;
}


...

NSDate *now = [NSDate date];

NSString *dateStr = [[self df] stringFromDate:now];
// dateStr is correct.
//dateStr is 2013-12-26 20:32:26 +0900

NSLog(@"dateStr is %@",dateStr);

NSDate *date = [[self df] dateFromString:dateStr];
// date is wrong.
//date is 2013-12-26 11:32:26 +0000

NSLog(@"date is %@",date);

为什么date不等于dateStr。

我想要日期返回2013-12-26 10:32:26 +0900

你知道吗?提前谢谢。

2 个答案:

答案 0 :(得分:3)

您获得的NSDate *date是正确的 - 2013-12-26 11:32:26 +00002013-12-26 20:32:26 +0900的UTC代表。 NSDate个对象不嵌入时区 - 它们代表一个抽象的时间点,而不是任何特定时区的时间点。

NSLog始终以UTC格式记录时间,因为它调用description的{​​{1}}方法。

答案 1 :(得分:0)

您需要更改最终日期的时区以获得所需的结果。