2008年7月28日月曜日

Windows、VBScriptでYYYYMMDD

YYYYMMDD(hhmm)。シリーズ。
ログファイルを出力するなら「これ+プリフィックス」をファイル名にするのが理想ではないでしょうか。
のVBScript、WSH編。
 
サンプルの下記テキストを.VBSで保存して実行します。


[sourcecode language='vb']
'/// 年月日 作成
tmpYYYYMMDD = year(now()) & Right(00 & month(now()), 2) & Right(00 & day(now()), 2)

'/// 時分 作成
tmpHHMM = Right(00 & hour(now()), 2) & Right(00 & minute(now()), 2)

'/// 合成
strDate = tmpYYYYMMDD & tmpHHMM
Wscript.echo strDate
[/sourcecode]

 
もともと便利な関数はありますが、少し表示の癖を吸収する必要が。実行結果は下記。
[caption id="attachment_447" align="alignnone" width="167" caption="画像:スクリプトの実行結果"]画像:スクリプトの実行結果[/caption]
 
 
以降解説へ。
 
 

解説


下記部分のコツだけ知れば十分、各関数や変換結果については"Wscript.echo"で表示するとよいです。
'/// 年月日 作成
tmpYYYYMMDD = year(now()) & Right(00 & month(now()), 2) & Right(00 & day(now()), 2)


  • now() 関数 の部分
    今の時刻を取得、"Wscript.echo now()"とすれば「YYYY(年)/MM(月)/DD(日) HH(時):MM(分):SS(秒)」が表示されます。
     

  • year, month, date 関数 を使っている部分
    now()でとった時刻からそれぞれ年、月、日を抜き出します。これだけで十分そうなんですけど、そううまくいかない。
     

  • Right 関数 を使っている部分
    文字列に対して指定した文字数分を右から取り出す、これで0を補完しています。
    month, date は MM、DDの部が一ケタだとそのまま表示、7月は "07" でなく "7" になってしまいます。これは都合が悪い。
    そのため month関数で取得した "7" の左に "00" をくっつけて "007"にした後で 右から2つとって "07" とします。


 
なお、"00" と0 を 2つくっつけているのは視覚的に二桁をとると自分用にわかりやすくしているためで、1個でも問題ないはず。
11月の場合は "11" → "0011" → "11" と、変わりませんが、こうしておくことで汎用的に使えます。
 
 
時と分のほうも大体一緒です。
 
応用メモ:
VBScriptでやる場合、Wscript.quit(YYYYMMDDの文字列)とすればerrorlevelとしてバッチファイルに渡せます。
DOSのみでやるときに苦手な処理、〇日以前の日付を文字列で取得したい時など有用です。
int(32)型の為、時分まで入れるとオーバーフローしてしまいますが。。