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



我编写了一个接受 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

我不确定为什么这与

将 NSString 转换为 NSDate(然后再转换回来)

NSDate值没有关联的时区,它们表示一个抽象的时刻。因此,"具有 EST 时区的 NSDate 对象"是不存在的。时区仅在格式化它们以进行输出或尝试进行基于日历的数学运算时才会发挥作用。

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

因此,您正在花费一个时间,将其格式化为特定时区的字符串,然后将其解析回同一时刻。这正在按预期工作。

最新更新