Takahiro Octopress Blog

-1から始める情弱プログラミング

Objective-cでUNIX時間を取得する方法

Objective-CでUNIX時間を扱うための方法

今日はUNIX時間を扱う方法について紹介します。UNIX時間とはUTCでの1970/01/01 00:00:00からの経過秒数を表したものです。
世界規模でアプリを開発するなら、UTCで時間を扱う必要があります。また、2つの時刻の差を求めるときは引き算をすれば良いので、時間の演算が非常に簡単にできることもメリットです。
すなわち、知っておいて損はないってことです。

では、Objective-cでのUNIX時間の扱い方について早速説明しましょう。

まずは、NSDate型をUNIX時間に変換する処理です。

1
2
3
4
5
6
- (double)convertUnixTimeFromDate:(NSDate *)date
{
  double unixtime = [date timeIntervalSince1970];

  return unixtime;
}

次に、UNIX時間をNSDate型に変換する処理です。

1
2
3
4
5
6
- (NSDate *)convertDateFromUnixTime:(double)unixtime
{
  NSDate *date = [NSDate dateWithTimeIntervalSince1970:unixtime];

  return date;
}

これらの2つのメソッドを用いて、試しに現在時間のログを出してみましょう。
下記はボタンをTouch Downしたときの処理です。

1
2
3
4
5
6
7
8
- (IBAction)timeBtnAction:(id)sender {
  NSDate *now = [NSDate date];
  NSLog(@"now: %@", now);
  double unixtime = [self convertUnixTimeFromDate:now];
  NSLog(@"unixtime: %f", unixtime);
  NSDate *now2 = [self convertDateFromUnixTime:unixtime];
  NSLog(@"now2: %@", now2);
}

このログは下記のようになります。
2014-04-16 23:33:27.827 timestamp[22795:907] now: 2014-04-16 14:33:27 +0000
2014-04-16 23:33:27.828 timestamp[22795:907] unixtime: 1397658807.824172
2014-04-16 23:33:27.830 timestamp[22795:907] now2: 2014-04-16 14:33:27 +0000

きちんと変換処理が実行されていることがわかります。
また、unixtimeは1397658807.824172のように小数点を伴って出力されます。単位は[秒]なのでマイクロ秒まで表示されていることになります。
もし、ミリ秒やマイクロ秒単位で時間を管理したいということであれば、くれぐれも小数点以下は切り捨て, 繰り上げ, 四捨五入などしないように!!

ということで本日はここまで。

Comments