日付と時間データのフィット

の情報を表示するために使われる、さまざまな文字列フォーマットは、情報をユーザに通知するのに役立ちますが、これらの値をプロットしたり分析するには、これらの値の数学的基礎が必要です。 Originは、天文学的なユリウス暦を改訂して日付と時刻を保存しています。 これは、時刻0は、BC4713/01/01の正午12:00です。 数字の整数部分は時刻0からの日数を表し、小数部分は24時間表示での分数を表します。 Originは、正午ではなく、夜中の0:00を表すように、12時間(0.50日)減算してこの値を使っています。

次のいくつかのサンプルでは、LabTalkスクリプトで日付と時刻のデータを扱う方法を示しています。

Note: 日付 または 時刻 で表されるテキストは、実際には、Originで数値として扱われない文字 または 文字と数値 の形式です。 列プロパティダイアログ(列名をダブルクリックするか列を選択し、「フォーマット:列フォーマット」)を使用して、テキストまたは文字と数値列を、日付時間フォーマットに変換します。 表示フォーマットは、変換時に列のテキストフォーマットに一致する必要があります。

内容

日付と時刻

例として、アクティブシートの列1に日付データ、列に時刻データがあるものとします。そして、日付と時刻を1つの列に保存するものとします。

/* 日付と時刻の両方は数学的基礎で成り立っているので加算可*/
Col(3) = Col(1) + Col(2);
 
// デフォルトで、新しい列は日数を表示 
/* フォーマットとサブフォーマット法を使って選択した日付と時間の表示をセット*/
 
// Format #4 は日付フォーマット
wks.col3.format = 4; 
// サブフォーマット #11 は MM/dd/yyyy hh:mm:ss              
wks.col3.subformat = 11;

上記の列番号は、format ステートメントにハードコーディングされています。列数をcnという変数に持っている場合、wks.col$(cn).format = 4.のようにして、数字の3$(cn)で置き換えることができます。 他の format および subformat オプションに対しては、LabTalk言語リファレンス: オブジェクトリファレンス: Wks.col (オブジェクト)をご覧下さい。

日付と時刻の列は、列1でMM/dd/yyyy のフォーマット、列2で hh:mm:ss のフォーマットを持つテキストの場合、同じ操作がいくつかのコード行で可能です。

// ループする行数を取得
int nn = wks.col1.nrows;

loop(ii,1,nn){                           
  string dd$ = Col(1)[ii]$;
  string tt$ = Col(2)[ii]$;
  // 日付と時間の文字列をテキストとして保存
  Col(3)[ii]$ = dd$ + " " + tt$;  
  // 日付関数は日付と時間の文字列を数値の日付値に変換
  Col(4)[ii] = date(%(dd$) %(tt$));  
};
// 列4を真の日付列に変換
wks.col4.format = 4; // 日付列に変換
wks.col4.subformat = 11; // M/d/yyyy hh:mm:ssとして表示

ここで、中間的な列は、文字列として日付と時刻の組合せを保持するように形式化され、結果の日付と時刻(数値)の値は4番目の列に保存されます。 これらは同じテキストになるよう現れますが、列Cは文字通りのテキストで、列Dは日付です。

この数学的な方法によって、2つの日付の差(2つの日付の日数、時間) を計算し、その結果を時間列に入れることができます。そして、時刻を日付に加え、新しい日付の値を計算できます。また、時刻データを時刻データに追加して、有効な時刻データを取得することができますが、日付データを日付データに加えることはできません。

出力用のフォーマット

利用可能な形式

D表記を使って、Originの組込の日付フォーマットの1つを使って、数値の日付の値文字列の日付時刻に変更することができます。

type "$(@D, D10)";

これは、現在の日付と時間(システム変数 @Dに保存) を読み込み可能な文字列として返します。

7/20/2009 10:30:48

D10 オプションは、MM/dd/yyyy hh:mm:ss に対応しています。上記スクリプトのD文字の後の数値を変更することで、多くの他の出力フォーマットが利用できます。これはワークシート列フォーマットダイアログの日付フォーマットドロップダウンリストの選択肢のインデックス(0から)です。最初の項目(インデックス = 0)は、Windowsの短縮形式の日付で、2番目はWindowsの長い形式の日付です。

Note: D は大文字でなければなりません。wks.col3.subformat = #, のようなワークシートのサブフォーマットを設定する場合、これらのインデックス値は1から始まります。

例えば

type "$(date(7/20/2009), D1)";

は、日本の地域の設定では以下のようになります。

09/07/20, 月曜日となります。

同様に、時刻の値の出力フォーマットに対して、類似のT表記があります。

type "$(time(12:04:14), T5)";   // ANS:12:04 PM

このように日付と時刻をフォーマットすることは、一般的な $() 置換 表記の特殊な形式を使います。

カスタムフォーマット

3つのカスタム日付と時刻のフォーマットがあります。そのうち2つはスクリプト編集可能なプロパティで、もう1つは列のプロパティダイアログで編集するか、ワークシート列オブジェクトメソッドで編集します。

  1. system.date.customformatn$
  2. wks.col.SetFormat オブジェクトメソッド

両方のメソッドは、カスタムフォーマットを示すために、 yyyy'.'MM'.'dd のような日付と時刻の指定子を使います。 以下に注意して下さい。

Dnn 表記

Originは、これらのカスタム日付の表示に対して、D19 から D21 を予約しています(Dの後の整数値は0から数えるので、サブフォーマット20から22)。 オプションのD19とD20は、それぞれシステム変数 system.date.customformat1$system.date.customformat2$ で制御されます。 このオプションを使うには、以下のサンプルをご覧下さい。

 
system.date.customformat1$ = MMM dd hh'.'mm tt;
type "$(Date(7/25/09 14:47:21),D19)";      // 出力Jul 25 02.47 PM 

system.date.customformat2$ = yy','MM','dd H'.'mm'.'ss'.'####;
type "$(Date(7/27/09 8:22:37.75234),D20)"; // 出力: 09,07,27 8.22.37.7523

Wks.col.SetFormat オブジェクトメソッド

ワークシート列に保存されている日付列のカスタム日付表示を指定するには、 Wks.Col.SetFormat オブジェクトメソッドを使います。 カスタム日付フォーマット指定子を入力するとき、非日付文字を引用符で囲んで下さい。 このオブジェクトメソッドは、アクティブワークシートの列に対してのみ動作します。

次のサンプルでは、アクティブワークシートの列4は、カスタム日付/時刻フォーマットを表示するようセットされています。

// wks.format=4 (日付), wks.subformat=22 (カスタム)
wks.col4.SetFormat(4, 22, yyyy'-'MM'-'dd HH':'mm':'ss'.'###);
doc -uw; // リフレッシュして変更を表示