GAUSS 19 - 強化された日付と時間の管理機能

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

 

page_top_icon