SenseTalkの日付と時間の値
SenseTalkは、日付と時間を操作するためのコマンドと関数を含んでいます。一つの日付または時間から別の日付または時間をマイEggplant( - )演算子を使用して減算し、その差を秒で得ることができます。時間間隔を日付または時間に追加することで、新しい日付/時間値を得ることも可能です(時間間隔の追加と減算を参照してください)。
日付、時間、および時間間隔
SenseTalkでは、"日付"と"時間"の基本的な区別はありません - どちらも時間の流れの中の精密な瞬間、またはタイムライン上のポイントとして扱われます。その起源(ゼロ値)は2001年1月1日の始まりの真夜中に、調整世界時でした。その瞬間以前の任意の日付または時間は内部的には負の値として扱われ、後の時間は起源以降の秒数を示す正の値 として扱われます。
SenseTalkは、「4/22/67」や「1967-04-22 18:00」など、さまざまな形式で表現された日付や時刻を認識できます。詳細についてはthe timeInputFormatグローバルプロパティを参照してください。Natural形式では、「2004年5月15日 午後10時57分」や「昨日」、「今日」、「来週の火曜日の午後」など、さらに多様な表現が可能です。todayやnowという単語(引用符を付けずに)は、現在の日付または現在の日付と時刻を示すために使用できます(変数として使用される場合は、他の値に割り当てられない限り)。この形式に関する詳細は、Natural形式を参照してください。
日付値が一日の時間を指定せずに提供されると、その日の正午を意味するとみなされます。日付なしで時間が指定されると、現在の日付(今日)の指定時間を意味するとみなされます。すべての日付と時間は、スクリプトが実行されているマシン上で現在設定されているローカルタイムゾーンであると想定されます。
_time interval_または_duration_は、時間の長さです。時間間隔を扱うとき、SenseTalkは特定の単位が与えられない場合、秒単位で測定された持続時間を想定しますが、週、日、時間、ミリ秒など、他の多くの単位も使用できます(Values内のTime Intervalsを参照してください)。
秒で正確に測定できる持続時間に加えて、SenseTalkは、月、calendarQuarters、calendarYearsなどを含む月を基準に測定された_calendar durations_ もサポートしています。使用可能なcalendarDuration単位の全リストを確認するには、次のコマンドを使用します:
put (each item of the unitNames whose unitType is calendarDuration) sorted
詳細については、Values内のCalendar Durations in Valuesを参照してください。
時間間隔とカレンダーの持続時間の両方を、過去または未来の時間値を生成するためのago and hence operatorsと一緒に使用できます。
日付と時間に実質的な違いはないため、この文書では、日付または時間を"日付/時間値"として参照することがあります。
関連するグローバルプロパティとローカルプロパティ
SenseTalkには、スクリプト内の日付と時間の値の動作に影響を与えるために使用できるいくつかのグローバルまたはローカルプロパティが含まれています。これらのプロパティは以下の概念の説明で言及されています。各プロパティの完全な定義は、Local and Global Properties for Working with Values で見つけることができます。具体的なプロパティは以下のとおりです:
The ClockFormatThe TimeFormatThe TimeInputFormatThe CenturyCutoffThe LastDayOfMonthCalculation
日付/時間の算術
時間間隔の追加と減算
任意の日付(または時間)から始めて、時間間隔を単純に追加または減算することにより、異なる日付/時間を取得することができます。
例:
put today + 2 weeks into dueDate
例:
subtract 3 hours 14 minutes 22 seconds from timer
日付または時間の差の計算
一つの日付または時間の値を別のものから引くことにより、日付間の日数や何かのプロセスにかかる経過時間を簡単に計算することができます。差は常に秒単位の時間間隔として表現されますが、それを(1 dayのような時間間隔の表現を使用して)その単位の秒数で割ることにより、異なる単位(例えば日)に変換することができます。
例:
put (expirationDate - "today") / 1 day into daysRemaining -- 結果は純粋な数値になります
put (expirationDate - "today") as days into daysRemaining -- 結果は日単位の数値になります
例:
put the time into startTime -- ここで計測を開始します
run somethingTimeConsuming -- 時間を計りたいものは何でも
put the time - startTime into secondsElapsed
日付または時間の比較
SenseTalkの比較演算子(is、=、comes before、<など)は、通常、比較される二つの値をテキストとして扱います。ただし、それらがどちらも数字であるか、あるいはそれらがどちらも日付または時間の値であると"知っている"場合を除きます。比較は通常、値をテキストとして扱いますので、以下のような場合には望ましい結果を得られません:
if the date is between "Sep 21" and "Dec 21" then put "Happy Autumn"
SenseTalkに日付または時間の比較を行わせるためには、date()またはtime()関数を使用してテキストを内部の日付/時間の表現に変換します。これがうまくいきます(年が指定されていない場合、現在の年が想定されるので、この例は任意の年で動作します):
if the date is between date ("Sep 21") and date ("Dec 21") then
put "Happy Autumn!"
end if