カレンダー日付と時刻の管理

ActionScript 3.0 では、カレンダー日付と時刻の管理に関するすべての機能がトップレベルの Date クラスにまとめられています。Date クラスには、世界標準時 (UTC) または何らかのタイムゾーンに基づくローカル時間において日付と時刻を処理するメソッドおよびプロパティがあります。UTC は時刻の基準となるもので、グリニッジ標準時 (GMT) と基本的には同じです。

サブトピック

Date オブジェクトの作成
時間単位の値の取得
日付と時刻の加算および減算
タイムゾーン間の変換

Date オブジェクトの作成

Date クラスは、すべてのコアクラスの中で最も多くの用途に使用できるコンストラクタメソッドを備えています。このコンストラクタは次のように 4 つの方法で使用できます。

(1) パラメータを指定しない場合、Date() コンストラクタでは、動作環境のタイムゾーンにおけるローカル時間で現在の日付と時刻を格納した Date オブジェクトを返します。その例を次に示します。

var now:Date = new Date();

(2) 1 つの数値パラメータを指定した場合、Date() コンストラクタはその値を 1970 年 1 月 1 日からの経過ミリ秒数として解釈し、それに基づいた Date オブジェクトを返します。パラメータは UTC の 1970 年 1 月 1 日を起点とする経過ミリ秒数として解釈されますが、返される Date オブジェクトが示す値は、(UTC 用メソッドを使用して取得および表示しない限り) ローカルのタイムゾーンで表示されます。ミリ秒数を表す 1 個のパラメータを指定して Date オブジェクトを新規作成する際は、ローカル時間と UTC の間のタイムゾーンの時差に注意してください。次のステートメントでは、UTC の 1970 年 1 月 1 日の深夜を表す Date オブジェクトを作成します。

var millisecondsPerDay:int = 1000 * 60 * 60 * 24;
// 基準日の 1970/1/1 から 1 日後の Date を取得する
var startTime:Date = new Date(millisecondsPerDay);

(3) 複数の数値パラメータを Date() コンストラクタに渡すこともできます。その場合、コンストラクタでは各パラメータを順に年、月、日、時、分、秒、ミリ秒の値と解釈し、それらに基づいた Date オブジェクトを返します。パラメータの値は UTC ではなくローカル時間を表すものと見なされます。次のステートメントでは、ローカル時間の 2000 年 1 月 1 日午前 0 時を表す Date オブジェクトを作成します。

var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0);

(4) 1 つのストリングパラメータを Date() コンストラクタに渡した場合、コンストラクタではそのストリングを解析して日付と時刻の要素を抽出しようと試み、それらに基づいた Date オブジェクトを返します。この方法で使用する場合は、Date() コンストラクタを try..catch ブロックで囲み、解析時のエラーをトラップできるようにしておくことをお勧めします。Date() コンストラクタが受け付けるストリング形式は多数あり、その一覧が『ActionScript 3.0 コンポーネントリファレンスガイド』に示されています。次のステートメントでは、新しい Date オブジェクトの初期化にストリング値を使用しています。

var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

Date() コンストラクタがストリングパラメータの解析に失敗した場合、例外が発生するのではなく、作成した Date オブジェクトに無効な日付値が格納されます。

時間単位の値の取得

Date オブジェクトに格納された各種の時間単位の値は、Date クラスのプロパティとメソッドを使用して取得できます。Date オブジェクトに格納されている時間単位の値を取得するには、次の各プロパティを使用します。

また、Date クラスにはそれぞれの時間単位の値を取得する方法が複数用意されています。たとえば、Date オブジェクトに格納された月の値は次の 4 とおりの方法で取得できます。

4 つの方法は効率面ではいずれも同等なので、必要に応じて便利な方法を使用してください。

上記のプロパティはそれぞれ、日付の値全体の一部を構成する要素を表しています。たとえば、milliseconds プロパティの値が 999 を超えることはありません。1000 に到達すると seconds プロパティの値が 1 加算され、milliseconds プロパティの値は 0 になります。

Date オブジェクトの値を 1970 年 1 月 1 日 (UTC) からの経過ミリ秒数として取得する必要がある場合は、getTime() メソッドを使用します。また、このメソッドと対照の関係にある setTime() メソッドを使用すれば、1970 年 1 月 1 日 (UTC) からの経過ミリ秒数を指定して既存の Date オブジェクトの値を変更できます。

日付と時刻の加算および減算

Date クラスでは、日付と時刻に対して加算および減算を実行できます。日付値は、内部的にはミリ秒換算で維持されているので、Date オブジェクトとの間で加算または減算を行う前に、その他の値をミリ秒に変換する必要があります。

日付と時刻の加算および減算を数多く実行するアプリケーションの場合は、次のように、共通の時刻単位値をミリ秒換算で保持する定数を作成すると便利です。

public static const millisecondsPerMinute:int = 1000 * 60;
public static const millisecondsPerHour:int = 1000 * 60 * 60;
public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24;

これで、標準の時刻単位を使用して容易に日付の演算を実行できます。次のコードでは、getTime() および setTime() メソッドを使用して、日付値を現在の時刻から 1 時間後に設定します。

var oneHourFromNow:Date = new Date();
oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour);

日付値を設定するもう 1 つの方法は、ミリ秒を表す 1 個のパラメータを使用して新しい Date オブジェクトを作成することです。たとえば、次のコードでは、ある日付に日数を 30 加えた日付を計算します。

// 今日を請求書の日付として設定する
var invoiceDate:Date = new Date();

// 30 日を加えて期限を取得する
var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay));

次に、30 日単位の時間を表すために millisecondsPerDay 定数に 30 を掛け、その結果を invoiceDate 値に加えて dueDate 値の設定に使用します。

タイムゾーン間の変換

日付と時刻の演算処理は、あるタイムゾーンを別のタイムゾーンに換算する必要がある場合に便利です。また、その際には、Date オブジェクトのタイムゾーンと UTC との時差 (分) を返す getTimezoneOffset() メソッドも役立ちます。値が分単位で返されるのは、タイムゾーンによっては 1 時間未満の単位で時差が設定されており、隣接するタイムゾーンとの差が 30 分という場合があるためです。

次の例では、タイムゾーンのオフセットを使用してローカル時間の日付を UTC に変換します。まずミリ秒単位のタイムゾーン値を算出し、それに基づいて Date オブジェクトの値を調整するという方法で処理を実行しています。

// ローカル時間の Date を作成する
var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

// タイムゾーンのオフセットを加算または減算して、Date を UTC に変換する
var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000;
nextDay.setTime(nextDay.getTime() + offsetMilliseconds);

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000073.html