GAUSS 19 - 強化された日付と時間の管理機能
日付と時間データを数式文字列の操作で直接読み込む
// Tell GAUSS that 'RateDateTime' is a string date. data = loadd("usd_cad_wk1.csv", "date($RateDateTime) + RateBid");
新しいdateの数式文字列は、日付と時間データをGAUSSが読み込めるよう変形します。
拡張された数式文字列の構文:
- 多くの日付/時間のフォーマットに対応し、それらを自動的に検出します。
- 100分の1秒とナノ秒単位に対応しています。
日付を他のフォーマットに従って柔軟に変更させる
- 使いやすい機能です。
- ほぼすべての文字列フォーマットから変換できます。
- DTスカラーとPOSIXの日付・時間に対応しています。
日付と時間文字列から秒数に変換する
dt_posix = strctoposix(str_date, fmt_str);
変換した数値から適当なフォーマットに戻す
// Convert to friendly string formats for tables and reports print posixtostrc(dt_posix, fmt_str2);
DTスカラーから適当な文字列に変換
// Convert DT dates to strings for easy reading dt_str = dttostrc(dt, "%D");
そして、DTスカラーに戻す
// Convert string dates to DT Scalars for plotting dt = strctodt(dt_str, "%D");
日付と時間データ上で分析を行う
GAUSS19では時間ベクトルを作成・利用する一連の時系列ツールがあります。どのような時間頻度を利用しても、直感的でかつ柔軟に時系列分析を行うことができます。
- 頻度と長さの異なる日付ベクトルを作成する
- 日付ベクトルを進める・戻す
- 日付と時間の差を求める
連続する日付を作成する
seqadtを用いて、以下のように連続するDTスカラーを作成します。POSIX日付の場合は、seqaposixを利用します。
// Create a vector starting at January 1980, with // five elements, each incremented by one month dt_mths = seqadt(198001, 1, "months", 5); // Create a vector starting at March 1st, 2016, with // 6 elements, each incremented by seven days dt_weeks = seqadt(20160301, 7, "days", 6); // Create a vector starting at March 1st, 2016 at 09:30:00, with // 6 elements, each incremented by 12 seconds dt_sec = seqadt(20160301093000, 12, "seconds", 6);
↓
dt_mths = 19800101000000 dt_weeks = 20160301000000 dt_sec = 20160301093000 19800201000000 20160308000000 20160301093012 19800301000000 20160315000000 20160301093024 19800401000000 20160322000000 20160301093036 19800501000000 20160329000000 20160301093048 20160405000000 20160301093100
日付ベクトルを進める・戻す
// Advance 17 days from July 21, 1984 dt_plus = timedeltadt(19840721, 17, "days"); // Regress 3 days from January 8, 1970 posix_minus = timedeltaposix(604800, -3, "days");
↓
dt_plus = 19840807000000 posix_minus = 345600
2つの日付の差を求める
// How many days between April 16 and July 21, 2012 diff_days = timediffdt(20120416, 20120721, "days"); // How many seconds between 09:38:21 and 09:31:00 diff_sec = timediffdt(20120524093821, 20120524093100, "seconds");
↓
diff_days = -96 diff_sec = 441