NSDateFormatter让我回到格林威治时间

时间:2013-08-31 15:20:46

标签: iphone objective-c nsdate nsdateformatter localtime

我得到了这个虚空的日期和时间:

-(void)getDay
{

NSDate *choice = [NSDate date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

[dateFormatter setDateFormat:@"yy"];
year = [[dateFormatter stringFromDate:choice] intValue];

[dateFormatter setDateFormat:@"MM"];
month = [[dateFormatter stringFromDate:choice] intValue];

[dateFormatter setDateFormat:@"dd"];
day = [[dateFormatter stringFromDate:choice] intValue];


[dateFormatter setDateFormat:@"HH"];
hour = [[dateFormatter stringFromDate:[NSDate date]] intValue];

//   NSLog(@"hour: %d",hour);

[dateFormatter setDateFormat:@"mm"];
minute = [[dateFormatter stringFromDate:[NSDate date]] intValue];

[dateFormatter setDateFormat:@"ss"];
second = [[dateFormatter stringFromDate:[NSDate date]] intValue];

}

如果我看到日志时间...它给了我当地时间的正确时间,但是当我把这个值放在另一个NSDate中我需要创建小时更改并成为格林威治时间时,这里是代码我使用方法:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:SS"];
   // NSLog(@"hour: %d",hour);
  //this log still gives me the right hour

    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

    self.myDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%d-%d-%d %d:%d:%d",day,month,year,hour,minute,second]];
  NSLog(@"my date: %@",myDate);

这最后一个日志如下所示:

  

2013-08-31 05:14:12.905 myApp [25987:904] my date:2013-08-31 15:14:00 +0000

我的小时应该是5:14但是格林威治时间是15:14 ... 为什么会发生这种情况?如何获得当地时间而不是格林威治时间? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码没有任何问题。问题是NSLog以GMT时间显示日期。尝试在NSLog中放置断点,您将看到self.myDate具有正确的时间,而NSLog以GMT显示时间。

我意识到在格式化程序字符串中你使用SS作为秒。你必须使用ss。