日付や時刻は「UTC ミリ秒値で表される現在時刻」で扱うのが便利

   2013/01/14

日付や時刻を扱う際に、どういう形式(データ)で持つかは
悩ましい問題だったりします。

毎度、管理人イガジーです。

年月日を 20121228 などの整数値で持つのもひとつの手です。
100で割った余りが日にち、10000で割った商が年、
10000で割った余りを100で割った商が月、などですね。
割と手軽です。

ただ、2つの日付の差が何日あるかの計算や、
変な入力値(2月30日など)があるとすると、その処理は面倒になります。

オススメは「UTC ミリ秒値で表される現在時刻」です。これは
1970年1月1日GMT午前0時0分(日本時間だと午前9時)を0として
そこからの経過時間をミリ秒(ms)でカウントしたもの(long値)です。
System.currentTimeMillis();
または
Calendar cc=new GregorianCalendar(); として
cc.getTimeInMillis();
で得ることができます。

このミリ秒時刻を、逆に通常の日付・時刻にするには Calendar cc に対して
cc.setTimeInMillis(ミリ秒単位の時刻long値);
とすると、あとは普通のカレンダアクセスと同様に
cc.get(Calendar.YEAR)); // 年
cc.get(Calendar.MONTH); // 月(0始まりなので+1する)
cc.get(Calendar.DAY_OF_MONTH); // 日にち
cc.get(Calendar.HOUR_OF_DAY); // 時 hour
cc.get(Calendar.MINUTE); // 分
cc.get(Calendar.SECOND); // 秒
とすると、それぞれの値が得られます。

2つのミリ秒単位の時刻があった時に、その差をとって
1000 で割れば、秒単位の時間差
1000*60*60 で割れば、時間差
1000*60*60*24 で割ると、日にち差
が得られます。

これを使ってカウントダウン表示するJavaアプリを作る例は
こちらを参照してください。

今年1年、ご愛読ありがとうございました。
来年がみなさまにとって良き年になりますように。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。