iOS开发中的NSDate时区问题

By | 2012 年 11 月 5 日

iOS设备上获取的时间,呵呵,不好说,有时候是GMT时间(比如[NSDate date]),有时候是本地时间,比如用位置传感器传回来的时间戳。而且现在的应用国际化了,还是要考虑时区问题。

在iOS中,处理时区问题是用NSTimeZone来进行的,下面是一个简单的例子。

-(void)testTime{
    NSDate *now = [NSDate date];//根据当前系统的时区产生当前的时间,绝对时间,所以同为中午12点,不同的时区,这个时间是不同的。
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.timeZone = [NSTimeZone systemTimeZone];//系统所在时区
    df.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSString *systemTimeZoneStr =  [df stringFromDate:now];
    df.timeZone = [NSTimeZone defaultTimeZone];//默认时区,貌似和上一个没什么区别
    NSString *defaultTimeZoneStr = [df stringFromDate:now];
    df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8 * 3600];//直接指定时区
    NSString *plus8TZStr = [df stringFromDate:now];
    df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];//这就是GMT+0时区了
    NSString *gmtTZStr = [df stringFromDate: now];
    NSLog(@"Test Time\nSys:%@\nDefault:%@\n+8:%@\nGMT:%@",systemTimeZoneStr,defaultTimeZoneStr,plus8TZStr,gmtTZStr);
}

该函数运行的结果是:(在+8区,当地时间19:06:07运行)

Test Time
Sys:2013-06-30 19:06:07
Default:2013-06-30 19:06:07
+8:2013-06-30 19:06:07
GMT:2013-06-30 11:06:07

发表评论

电子邮件地址不会被公开。 必填项已用*标注