カレンダー日付と時刻の管理Flash Player 9 以降、Adobe AIR 1.0 以降 ActionScript 3.0 では、カレンダー日付と時刻の管理に関するすべての機能がトップレベルの Date クラスにまとめられています。 Date クラスには、世界標準時(UTC)または何らかのタイムゾーンに基づくローカル時間において日付と時刻を処理するメソッドおよびプロパティがあります。 UTC は時刻の基準となるもので、グリニッジ標準時(GMT)と基本的には同じです。 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; // gets a Date one day after the start date of 1/1/1970 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() コンストラクターでは、様々なストリング形式を使用できます(『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』のリストを参照)。次のステートメントでは、新しい Date オブジェクトの初期化にストリング値を使用しています。 var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); Date() コンストラクターがストリングパラメーターの解析に失敗した場合、例外が発生するのではなく、作成した Date オブジェクトに無効な日付値が格納されます。 時間単位値の取得Date オブジェクトに格納された各種の時間単位の値は、Date クラスのプロパティとメソッドを使用して取得できます。 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 加えた日付を計算します。 // sets the invoice date to today's date var invoiceDate:Date = new Date(); // adds 30 days to get the due date var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay)); 次に、30 日単位の時間を表すために millisecondsPerDay 定数に 30 を掛け、その結果を invoiceDate 値に加えて dueDate 値の設定に使用します。 タイムゾーン間の変換日付と時刻の演算処理は、あるタイムゾーンを別のタイムゾーンに換算する必要がある場合に便利です。 また、その際には、Date オブジェクトのタイムゾーンと UTC との時差(分)を返す getTimezoneOffset() メソッドも役立ちます。値が分単位で返されるのは、タイムゾーンによっては 1 時間未満の単位で時差が設定されており、隣接するタイムゾーンとの差が 30 分という場合があるためです。 次の例では、タイムゾーンのオフセットを使用してローカル時間の日付を UTC に変換します。 まずミリ秒単位のタイムゾーン値を算出し、それに基づいて Date オブジェクトの値を調整するという方法で処理を実行しています。 // creates a Date in local time var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); // converts the Date to UTC by adding or subtracting the time zone offset var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000; nextDay.setTime(nextDay.getTime() + offsetMilliseconds); |
![]() |