当设备的时区发生变化时,iOS中的日期时间转换

时间:2014-04-25 15:07:57

标签: objective-c nsdateformatter

我从我的服务器上获得时间,格式为yyyy-MM-ddTHH:mm:ss,例如2014-05-21T09:30:00。我将这些转换为NSDate并使用下面的代码保存在iphone上的sqlite

NSString *strDate = @"2014-05-21T09:30:00";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setTimeZone:[NSTimeZone timeZoneWithName:@"EDT"]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSDate *date = [df dateFromString:strDate];

在我更改设备上的时区之前,它可以正常工作。如果我改变设备上的时间就搞砸了。知道我在这里做错了什么吗?

  1. 设备的时区为东部,我保存时间为上午8:00
  2. 我将设备的时区更改为太平洋,时间更改为上午5:00
  3. 我有一个更新过程,它会再次更新所有日期时间值,并且会回到上午8点
  4. 我现在将设备的时区更改为东部,时间则更改为上午11点
  5. 我再次运行更新过程,时间又回到上午8点
  6. 如何保存这些时间,无论用户位于哪个时区,他们总能看到东部时间。

    谢谢,

    d

1 个答案:

答案 0 :(得分:1)

NSDate本身不知道时区;它只是一个围绕double值的简单包装器,它表示自某个固定时间(我想2001年1月1日或其他什么)UTC以来的秒数。

您需要的是NSDateFormatter,类似于您用来解析日期的NSDate,可以使用EDT时区将NSString转换为{{1}}。