iOS:发生时区问题

时间:2015-03-09 21:35:30

标签: ios objective-c iphone timezone nstimezone

似乎苹果时区现在对我有问题。我测试了下面的代码,但它没有正常工作。这就是我到目前为止所拥有的。

 NSDate *today = [NSDate date];

 NSDateFormatter *estDf = [[NSDateFormatter alloc] init];
 [estDf setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];
 [estDf setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

  NSString *stringDate = [estDf stringFromDate:today];
  NSDate *todaydateadjusted = [estDf dateFromString:stringDate];

  NSLog(@"Todays date is %@",[estDf stringFromDate:todaydateadjusted]);

这是我的NSLog回应 Todays date is 2015-03-09 16:25:02

我预计17:25:02时间不是16:25:02。因为它是5 o'在现在的时间p.m它现在应该打印出17而不是16。其他人有这个问题吗?也许我的代码有问题。

2 个答案:

答案 0 :(得分:0)

现在有夏令时。你不应该使用EDT吗?

另一件事是时区名称与时区缩写。看看这个例子 - 我在Swift中写了它,但我认为它应该很容易理解并转换为ObjC。

var now = NSDate()
var df = NSDateFormatter()
df.timeZone = NSTimeZone(abbreviation: "EDT")
//df.timeZone = NSTimeZone(name: "EDT") <- wrong
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let edt = df.stringFromDate(now)

如果要使用全时区名称,请使用例如 df.timeZone = NSTimeZone(name: "America/New_York")

答案 1 :(得分:0)

你需要改变这个:

[estDf setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];

到此:

[esfDf setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EDT"]];