NSDate与NSTimezone显示错误的日期

时间:2014-10-02 11:07:56

标签: ios objective-c iphone nsdate nstimezone

您好我正在尝试将GMT时间显示到我的设备时间。 我的设备时区是EDT。

我将GMT时间作为字符串

       // GMT Time-----2014-11-27 19:32:00 

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 dateFormatter.dateFormat = @"HH:mm:ss";
 NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
 NSDate *startDate = [dateFormatter dateFromString:@"2014-11-27 19:32:00"];

我的开始日期为 -

    //startDate---2014-11-27 19:32:00 +0000

现在我正在尝试将此转换为当地时间

NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
dateFormatter2.dateFormat = @"hh:mm a";
NSTimeZone *local = [NSTimeZone localTimeZone];
[dateFormatter2 setTimeZone:[NSTimeZone localTimeZone]];
NSString *startDateStr = [dateFormatter2 stringFromDate:startDate];

根据我的时区(EDT),结果必须是 - 下午3:32 但是我的时间错了

  //startDateStr---02:32 PM

我已经用GMT打印了我的时区差异

    NSLog(@"TimeZone  %d",[[NSTimeZone localTimeZone] secondsFromGMT]);
   // TimeZone   -14400     - this correct and as per this the startDate must be 03:32 PM

我在哪里弄错了? 请帮帮我

1 个答案:

答案 0 :(得分:0)

非常聪明。您转换的日期是2000年1月1日。因此,夏令时不同。格林威治标准时间1月1日19:32在你所在的时区下午2:32。但今天格林威治标准时间19:32是您所在时区的下午3:32。