Excelのシート上なら Text関数、VBA (VisualBasic for Application) なら Format関数、
VisualBasicシリーズなら・・・って、列挙するまでも無く、既存関数で可能な、全く必要のない処理なのだが、
VBScriptでは、ハナシが違ってくる。
そもそも、VBS(WSH WindowsScriptingHost 現WindowsScriptHost)は、古来w
日付処理すら内部に持たない動作環境だった・・・
わざわざ、Windowsのプロセスをオブジェクトとして呼び出して、ソコから取得していた時代がww
それが、あれよ×2 と拡張され、簡単に呼び出せるようになったまでは良かったのだが、
完全な書式指定処理は内包せず、システムの設定依存となってしまった・・・
ちょっと処理すれば、桁揃え程度は誰でも出来る記述だったが、イマイチ汎用性に欠いてしまう・・・
いろんなサイトで同様の処理が列挙されているモノの、
中々、関数として そのまま使え(流用でき)るのが みつからない・・・
ソコで、自分で書いてみた。
'------------------------------------ |
日時値指定ナシで、今の日時文字列を、欲しいカタチで得たいだけなら、コレで充分
書式)
iDT (dSplitter,dtSeparater,tSplitter,Control) |
実行a) |
実行b) |
結果の内容自体は、いずれも文字列
・・・パラメータ無指定によるエラーを、回避する構造にはしていないので注意が必要。
無意味に複雑に感じる向きも少なくないと思うが、スクリプトの短さと共に、
他のvbsファイル作成の際にも流用し易いコトに重点を置いている。
また、Windowsの日付設定[地域のプロパティ]が、インストール既定値であることを前提としている。
コレがVBなら容易に既定値を設定できて楽なのだが、VBSだと型宣言すら思い通りにならんのがクチ惜しい・・・
でもまぁコレなら、それなりに、そのまま流用できると思う。
日付/時刻を繋がった文字列として取得したり、それぞれ分けて、配列として取り出すことで、
呼び出した主処理上で、使い分けが利くようになっている。
また、日付時刻関数 FormatDateTime の癖を利用しているのも特徴だ。
肝心の処理だが、主たるは、▼コレ。
FormatDateTime(Date[,NamedFormat]) |
まず、コイツに、日付のみ(Date関数)を投入することで、確実に日付文字列を確保する。
nD = FormatDateTime(Date(),0) |
NamedFormatパラメータ 0 (ないし、省略 vbGeneralDate)で、yyyy/mm/dd形式の文字列を得られる。
うっかりココで Now関数とか入れちゃうと、yyyy/mm/dd H/n/ssが返ってきてしまい、
時/分 の部分だけ、桁が可変で使えない。・・・何故かシステム既定だと H/n になってるのだ。
(このクセさえなければ、そのまま使えて便利なのだが・・・)
しかし、システム設定には触れずに処理させたい!
ってワケで、次に、秒のみを取得する。 FormatDateTime のパラメータに 3 (vbLongTime) を指定すると、
実行) FormatDateTime(Now(),3) |
Windowsのシステム既定値って・・・(´ヘ`;)
実スクリプトでは、戻り値をコロンで Split(配列化)し、配列番号{(2)}指定で秒の部分のみを取り出している。
ソレをアトでくっつけるので、コロンを事前に付けてあったりする。
nS = ":" & Split(CStr(FormatDateTime(nX,3)),":")(2) |
更に、時分・・・ FormatDateTime のパラメータを 4 (vbShortTime) を指定、
実行) FormatDateTime(Now(),4) |
と、桁の揃った時分が返ってくる、ソレに秒の文字列をくっつけて時分秒文字列は完成。
strHMS = FormatDateTime(nX,4) & nS |
・・・ぶっちゃけ、こう▼書いても同じなんだけどねwww
strHMS = FormatDateTime(nX,4) & ":" & Split(CStr(FormatDateTime(nX,3)),":")(2) |
あとは、日付文字列とを、どう返すか等を処理しているだけ。
セパレータの指定は、日付処理を色んなカタチで用いるコトの多い方なら、重要さが判ると思う。
ファイル名構築であったり、フォルダ名だったり、はたまたWebのURLだったり、
テキストファイル内への書き込みだったり、etc etc・・・ セパレータは用途によって随分と異なるようでw
主処理で、Replaceカマせばイイだけなんだけど、どうせなら取得時点で完了していたほうが・・・と
手抜き根性がココまでさせたというオチも付き、オアトがヨロしいようで・・・
<FormatDateTime ヘンなクセ>
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。