プログラミング
逆引き
クライアントとの通信
VisMでの通信
Factoryでの通信
WebServiceでの通信
CSP (Cache' Server Pages)
Cache'SQL
設定・性能


【広告】









逆引きCache' Object Script

Cache' Object Script

文字列 数値 ファイル 日時 ユーティリティ

日時

はじめに $Horologについて

Cache'は基本的に日時を$Horolog関数(省略形で$H)の戻り値の形式で保持します。
システム日時が2011/03/11 14:46:18だとすると、$Horologは
> Write $Horolog
62161,53178
の値を返します。

カンマより前 が日付のシリアル値で、1840/12/31を起点とした日数となります。1840年(天保11年)以前の値を扱う場合は$Horolog形式に変換できないので注意が必要です。上限は9999/12/31なので問題となることはないでしょう。

カンマより後ろ が時刻のシリアル値で、午前0時0分0秒を起点とした秒数となります。

$Hから日付を取得

$ZDate関数を使います。第一引数が$Hの値、第二引数が変換形式です。

よく使う第二引数は以下になります。通常は3, 8 を覚えておけば問題ないでしょう。

第二引数概要
1
(省略時)
MM/DD/YYYY 形式で返します12/31/2000
3YYYY-MM-DD 形式で返します2000-12-31
8YYYYMMDD 形式で返します。
8桁数値で返すので、8。
20001231
11曜日を返します。
Sun, Mon, Tue, Wed, Thu, Fri, Sat
Sun
16YYYY年MM月DD日形式で返します 2000年12月31日
> Write $ZDate($H,3) // YYYY-MM-DD 形式で取得
2011-09-25

> Write $TRanslate($ZDate($H,3), "-","/") // YYYY/MM/DD 形式で取得 
2011/09/25

> Write $Piece($ZDate($H,3) ,"-",1) // YYYYを取得
2011

> Write $Piece($ZDate($H,3) ,"-",2) // MMを取得
09

> Write $Piece($ZDate($H,3) ,"-",3) // DDを取得
25

> Write $ZDate($H,11) // 曜日を取得
Sun

また、$TR関数を使って以下の様なことも出来ます。
> Write $TR("abcd年ef月gh日","abcdefgh",$ZDate($H,8))
2014年01月23日

$Hから時刻を取得

$ZTime関数を使用します。第一引数が$Hの値のカンマより後ろ、第二引数が変換形式です。

> Write $ZTime(53178)
14:46:18

> Write $ZTime( $P($H,",",2) )  // $Pieceで$Hのカンマより後ろを取得
21:05:18
第二引数には以下のような値が設定できますが、普通はデフォルトで用が足ります。
第二引数概要
1
(省略時)
HH:mm:SS 形式で返します14:46:18
2HH:mm 形式で返します14:46
3hh:mm:SSAP で返します02:46:18PM
4hh:mmAP 形式で返します 02:46PM

$Hから日付と時刻をまとめて取得

$ZDateTime関数を使います。$ZDate関数と$ZTime関数が合体したものです。
第一引数が$Hの値、第二引数が日付の変換形式($ZDateの第2引数)、第三引数が時刻の変換形式($ZTimeの第3引数)です。

> Write $ZDateTime($H,3) // YYYY-MM-DD HH:mm:SS 形式で取得
2011-09-25 15:44:07

より詳細な時刻を取得

$ZTimeStamp関数を使用します。$H形式の後ろに小数点以下3桁がついた形式で応答され、1秒よりも小さい時刻を取得することができます。
$ZTimeStampはUTC時刻(グリニッジ時刻)が応答され、日本時間とは9時間の時差がある点に注意して下さい。

> Write $ZTimeStamp
62383,44912.808

別の方法として、$Now関数があります。ver2010ぐらいから使えるようになった関数ですが、 $ZTimeStampよりも小さな位まで取得することができます。
$ZTimeStampとちがってタイムゾーンも反映された時刻が取得されるので、こちらのほうが便利ですね。
> Write $Now()    //   ()が必要なので注意
62656,34467.678558

タイムゾーンを取得

> Write $system.SYS.TimeZone()
-540
UTC-9時間 = -540分ということですね。

文字列から$H形式の値を取得

$ZDateH, $ZTimeH, $ZDateTimeH を使用します。
それぞれ $ZDate, $ZTime, $ZDateTime の逆の関数になります。

> Write $H   // $Hの値を表示
62374,13022

> Write $ZDate($H,3)  // $Hから日付を取得
2011-10-10

> Write $ZDateH("2011-10-10",3)  //文字列から$H形式を取得。第2引数も$ZDateと同じ
62374

ある処理に要する時間を計測する

$ZHorolog 関数を使うと、小数点以下6桁程度の秒数を取得することができます。
これを使用して、ある処理に要した時間を計測するには、次のようにします。

   start=$ZH
   
   //計測したい処理
   For i=1:1:100000 a=$ZSQR(i) }

end=$ZH
   Write end-start,"秒かかりました"

4.585022秒かかりました

日付の加算・減算

$SYSTEM.SQL.Functions.DATEADDメソッドを使用します。
> Write $SYSTEM.SQL.Functions.DATEADD("day", 7, "2020-01-01") 	// 2020年01月01日の7日後を取得する
2020-01-08 00:00:00
第一引数には、どの単位で加算・減産するかを指定します。 値は year, quarter, month, week, day, hour, minute, second, millisecond のいずれかを指定できます。
第二引数には、加算・減産する量を数値で指定します。マイナスの値も設定できます。
第三引数には、基準となる日を文字列または$Horolog形式で指定します。
> Write $SYSTEM.SQL.Functions.DATEADD("minute", -45, "0:15") 	// 0:15の45分前を取得する
1899-12-31 23:30:00	                          // 省略時、日付は1900-01-01として動作する



単純に日単位の加算であれば、$H形式に加算するだけでいいですね。
> Write $ZD($H)      // 今日
05/10/2015 > Write $ZD($H+3) // 今日の3日後
05/13/2015

和暦(平成・昭和など)を求める

TBD