44
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【iOS】日時をNSStringからNSDateに変換する

Last updated at Posted at 2014-09-16

NSDateFormatterの挙動でちょっとはまったのでメモ。
日時をNSStringからNSDateに変換する方法です。

NSDateFormatter

NSString時間をNSDateに変換するために、ここではNSDateFormatterを使います。

例は後述しますが 注意が必要なのはタイムゾーンの指定 の箇所です。

タイムゾーンにはGMTからの経過時間をセットします。
GMTとはグリニッジ標準時のことで、世界のどこでも共通の時間になります。

NSDateFormatterでNSStringをNSDateに変換する際、タイムゾーンを指定しないと自動でローカル時間からGMTへの変換処理が入ってから出力されます。
つまり、 ローカル時間の設定(設定>一般>日付と時刻で設定)によって出力結果が変わってしまう ので、タイムゾーンは指定するようにしましょう。

ちなみにNSDateをNSStringに変換すると自動でローカル時間に変換してくれちゃうので、その逆ということなんですかね。

そのままの時間でNSDateにしたい場合

タイムゾーン指定でGMTからの経過時間に0をセットしてあげると、NSStringで記載した日時そのままでNSDateに変換できます。

NSString* dateString = @"2014-09-14 15:45:00";
	
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//タイムゾーンの指定
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

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

出力結果 date: 2014-09-14 15:45:00

GMTなNSDateにしたい場合

NSStringをGMTなNSDateにしたい場合は、タイムゾーン指定の箇所にGMTからの経過時間をきちんとセットしてあげる必要があります。
例えばNSStringが日本時間の場合は、9時間をセットしてあげます。

NSString* dateString = @"2014-09-14 15:45:00";
	
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//タイムゾーンの指定
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:60 * 60 * 9]];

NSDate *date = [formatter dateFromString:dateString];
    
NSLog(@"date: %@",date);
	
出力結果 date: 2014-09-14 06:45:00

おわりに

ローカル時間の設定がどこになっていてもGMTは同じになるので、ある特定の時間と現在時刻を比較をする場合など、それぞれGMTに変換してあげると何かと便利だったりします。

ちなみにGMT/ローカル現在時刻は以下で一発で取得できますヨ!

//GMT現在時刻
NSDate* gmtNow = [NSDate date];

//ローカル現在時刻
NSDate* localNow = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
44
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?