blog.bouzuya.net

2012-07-31 WSH(4)〜VBScriptにおけるDateTime〜

WSHの4回目。今日は日付の扱いと、命名規則をガイドラインに準拠させることについて記録しておく。どちらもWSHというよりはVBScriptの範囲である。

まずは日付の扱いについて。VBScriptで、現在の日付を得るにはDate関数を使う。現在の時刻を得るにはNow関数を使う。その他にも日時を取り出す関数や差を得る関数などが用意されている。詳細はVBScriptランゲージリファレンスを参照すること。

文字列に整形するための関数にはFormatDateTimeがあるけど、用意されている形式が足りない。システム設定に影響されるし、初期設定だとコロンやスラッシュで区切られてしまうので使いづらい。

諦めて自作する。ハイフン区切りで先頭をゼロ埋めして桁数を合わせてほしい。printfみたいのがあれば一発で片付くのに……と不満をこぼしつつ、汎用で使えそうなPadLeft関数を作り、それを使って今回の目的に合わせたFormatDate関数を作る。できたものは次のような感じ。

出力結果はこんな感じ。

C:\Users\user\Dropbox\wsh>cscript //Nologo //Job:RotateBackup rotate-backup.wsf /srcfile:target.zip /dstdir:C:\Users\user\backup
Echo VBScript Date/Time Function result
Date()         :2012/07/31
Year(today)    :2012
Month(today)   :7
Day(today)     :31
Weekday(today) :3
Tuesday tue tue
Now()       :2012/07/31 21:32:04
Hour(now)   :21
Minute(now) :32
Second(now) :4
strDate: 2012-07-31
Hello, WSH!

srcfile:target.zip
dstdir :C:\Users\user\backup

今回は、上記の日付処理のほか、関数に切り出すなどのリファクタリングや、命名規則をガイドラインに準拠させてある。

ガイドラインはぼくが見るかぎりあまり好きになれないものだ。ハンガリアン記法などは書いていてうんざりする。とは言え、それが標準とMSDNにあるので従っておく。郷に入ってはなんとやらだ。それに、型のサポートが弱く、大文字小文字を区別しないVBScriptではそれなりに有効性があるかもしれない。似ているからと言ってVisual Basic 7.0以降(.NET FrameworkのVisual Basic)では選択してほしくない規則なのは間違いない。(余談だけど、実際.NET向けのガイドラインではハンガリアン記法を禁止するように書いてある。)

それぞれの考え方にとりあえず合わせてみて、どうしても合わなければ考える。一度は受け入れてみることが大事だと思う。やり直しが効くことだしね。

23 min.