NSDateで取得したGMT時間のままNSStringに変換する方法
背景
NSDateのdateメソッドで時刻を取得すると日本時間とは9時間差のGMT時間が返されることは知っていたのだがNSDateFormatterで取得した時間をNSString型に変換したらGMT時間でなく現地時間に変換されてしまっていたので調べた。
現象
NSDate *now = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString* dateString = [formatter stringFromDate:now]; NSLog(@"now:%@", now); //now:2014-04-04 11:16:16 +0000 NSLog(@"dateString:%@", dateString); //dateString:2014-04-04 20:16:16
GMT時間のままNSStringに変換されない。
解決方法
NSDate *now = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; NSString* dateString = [formatter stringFromDate:now]; NSLog(@"now:%@", now); //2014-04-04 11:22:48 +0000 NSLog(@"dateString:%@", dateString); //dateString:2014-04-04 11:22:48
このようにNSDateFormatterにタイムゾーンを設定してやることでGMT時間でNSStringに変換できる。 タイムゾーンはNSTimeZoneクラスのtimeZoneForSecondsFromGMTというGMT時間からの経過秒数を引数にもつメソッドに0を指定したタイムゾーンをセットしてあげる。