如何使用defaulttimezone输出NSDate?

时间:2010-09-26 10:09:20

标签: iphone timezone nsdate

如何使用defaulttimezone输出当前日期和时间? 当我使用以下代码时,我总是在GMT中获得时间。是否可以将NSDate转换为defaulttimezone?我无法使用NSDateFormatter,因为我需要一个具有正确时间的NSDate对象。

NSDate *date = [NSDate date];
NSLog(@"Time: %@", date);

输出:2010-09-26 12:07:12 TimeTest [2641:207]时间:2010-09-26 12:07:12 GMT

更新 当我必须在合适的时间返回NSDate对象时,如何将NSDateFormatter与setTimeZone一起使用?

 NSDate* date = [NSDate date];

 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
 [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
 NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"MESZ"];
 [formatter setTimeZone:tz];

 NSString *datestr = [formatter stringFromDate:date];
 NSLog(@"%@", datestr);

 NSDate *datenew = [formatter dateFromString:str];
 NSLog(@"%@", datenew);

第一个NSLog输出正确的时间,但是当我想用正确的时间制作一个NSDate对象时,我又得到了错误的时间。

2 个答案:

答案 0 :(得分:2)

  

我无法使用NSDateFormatter,因为我需要一个具有正确时间的NSDate对象。

这没有任何意义。 NSDate表示单个时间点。它不知道也不关心时区。例如,今天,格林尼治标准时间12:00和今天,06:00-0600将由同一个NSDate对象表示。

要在特定时区显示日期,请使用NSDateFormatter,特别是其setTimeZone:方法。

答案 1 :(得分:1)

有时你想要拥有当前时间([NSDate日期],但是它已经转换为你的时区,而不仅仅是为用户格式化,而是用它进行计算。我想出了这个简单的溶液:

double timeDifference = [[NSTimeZone systemTimeZone] secondsFromGMT];
double now = [[NSDate date] timeIntervalSince1970] + timeDifference;

在我的时区中获取当前timeInterval非常有用。就我而言,日期都非常灵活和动态,并没有与任何日历相关联。我正在与开始时间相关的时间工作。

难以解释。无论如何,也许一些有我问题的人,他们最后都在这篇文章中,现在也有他们的答案。