创build具有特定时区的NSDate对象

我已经写了一个方法,接受一个NSDate对象,应该把它变成一个NSDate对象与EST时区。 我见过其他人完成这个的方式是使用date格式化程序将date更改为具有指定时区的string。 问题是当我尝试使用“dateFromString”将该string更改回NSDate对象。

- (NSDate*)turnToEST:(NSDate*)date { NSLog(@"turnToEST called with date %@", date); NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]]; NSString *stringFromDate = [dateFormatter stringFromDate:date]; NSLog(@"date formatted is %@", stringFromDate); NSDate *dateFromString = [[NSDate alloc] init]; NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc]init]; [dateFormatter2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; dateFromString = [dateFormatter2 dateFromString:stringFromDate]; NSLog(@"date has been changed to %@", dateFromString); return date; } 

随着输出…

 turnToEST called with date 2013-12-19 14:15:17 +0000 date formatted is 2013-12-19 09:15:17 date has been changed to 2013-12-19 14:15:17 +0000 

我不确定为什么这个和以前不一样

将NSString转换为NSDate(并返回)

NSDate没有关联的时区,它们代表了一个抽象的时刻。 所以“一个有EST时区的NSDate对象”不是存在的东西。 时区只在格式化输出或尝试执行基于日历的math时才起作用。

打印输出时, NSLog始终使用UTC。

所以你花了一些时间,把它格式化成一个特定时区的string,然后parsing回到同一时刻。 这是按照预期工作的。