DartのDateクラスを使うと現在時刻などを知ることができます。
APIリファレンスに明言されていませんが、DartのDateクラスは、「1970/01/01 00:00:00.000」を基準とした実装となっているようです。現在時刻のインスタンスを取得するためのnow()コンストラクタが提供されているので、(1), (2)で、まずはそれを使ってみています。これだけで「time :2012-04-21 06:59:47.095」のように表示できます。current.valueは、「1970/01/01 00:00:00.000」から経過したミリ秒の値となるので「msecs:1334959187095」のように表示されます。
年月日などを個別に取得することもできます。コメントで、各値のとる範囲を書いてあります。weekdayはDateに定数が定義されているので、それを使って文字列へ変更しています。月についてもDateに定数が定義されているので、それらを使って文字列へ変更するようにした方が良いのですが、ちょっと手を抜いています。
class DateSample { void run() { Date current = new Date.now(); print("time :${current}"); // (1) print("msecs:${current.value}"); // (2) int y = current.year; int m = current.month; // 1..12 int d = current.day; // 1..31 int h = current.hours; // 0..23 int min = current.minutes; // 0..59 int s = current.seconds; // 0..59 int ms = current.milliseconds; // 0..999 int w = current.weekday; String weekday = ""; switch(w) { case Date.MON: weekday = "MON"; break; case Date.TUE: weekday = "TUE"; break; case Date.WED: weekday = "WED"; break; case Date.THU: weekday = "THU"; break; case Date.FRI: weekday = "FRI"; break; case Date.SUN: weekday = "SUN"; break; case Date.SAT: weekday = "SAT"; break; } print("${y}/${m}/${d} ${h}:${min}:${s}.${ms} (${weekday})"); Date date = new Date.withTimeZone(1970, 1, 1, 0, 0, 0, 0, new TimeZone.utc()); print("date(UTC) :${date}"); print("date.value(UTC) :${date.value}"); // 1970/01/01 00:00:00.000が基準 print("current-date :${current.difference(date)}"); print("current-date(day) :${current.difference(date).inDays}"); print("current-date(hours):${current.difference(date).inHours}"); print("current-date(mins) :${current.difference(date).inMinutes}"); print("current-date(secs) :${current.difference(date).inSeconds}"); print("current-date(msecs):${current.difference(date).inMilliseconds}"); date = new Date.fromEpoch(0, new TimeZone.local()); print("date(Local) :${date}"); print("date.value(Local) :${date.value}"); } } void main() { DateSample app = new DateSample(); app.run(); }
Dateのインスタンスを取得するためには、コンストラクタwithTimeZone()や、コンストラクタfromEpoch()を使う方法があります。withTimeZone()は、時刻とタイムゾーンを指定しますし、fromEpoch()は1970/01/01 00:00:00.000からの経過ミリ秒数とタイムゾーンを指定します。サンプルでは1970/01/01 00:00:00.000に相当するDateのインスタンスを生成していますが、withTimeZone()ではUTCを、fromEpoch()ではローカルのタイムゾーンを指定しているという違いがあります。このため、date.valueの表示でUTCのものは「1970-01-01 00:00:00.000Z」となりますが、ローカルのものは「1970-01-01 09:00:00.000」となります。inMilliseconds()のようなメソッドを使うと、1970/01/01 00:00:00.000からの経過時間を知ることができます。
実行結果は次のようになります。
time :2012-04-21 06:59:47.095 msecs:1334959187095 2012/4/21 6:59:47.95 (SAT) date(UTC) :1970-01-01 00:00:00.000Z date.value(UTC) :0 current-date :370821:59:47.095 current-date(day) :15450 current-date(hours):370821 current-date(mins) :22249319 current-date(secs) :1334959187 current-date(msecs):1334959187095 date(Local) :1970-01-01 09:00:00.000 date.value(Local) :0
- クラスベースのオブジェクト指向プログラミング言語の基礎を学ぶには … 改訂版 基礎Java(CD-ROM付) (IMPRESS KISO SERIES)
- クラスベースのオブジェクト指向プログラミング言語を学ぶには … プログラミング言語Java (The Java Series)
- 関数型プログラミング言語を学ぶには … Scalaスケーラブルプログラミング第2版
- プログラミング言語の理論を学には … プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)