使用特定时区创建NSDate对象

时间:2013-12-19 14:27:21

标签: ios nsdate nsdateformatter

我编写了一个接受NSDate对象的方法,并将其转换为带有EST时区的NSDate对象。我看到其他人完成此任务的方法是使用日期格式化程序将日期更改为具有指定时区的字符串。问题是当我尝试使用“dateFromString”将该字符串更改回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

我不确定为什么这与

有什么不同

Converting NSString to NSDate (and back again)

1 个答案:

答案 0 :(得分:4)

NSDate具有关联的时区,它们代表一个抽象的时刻。因此“具有EST时区的NSDate对象”不是存在的东西。时区仅在格式化输出或尝试进行基于日历的数学时才起作用。

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

所以你花了一些时间,将它格式化为特定时区的字符串,然后将其解析回到同一时刻。这是按预期工作的。