| 基礎解説 チェック式 WSH入門 第4回 4.日付処理関数を使いこなすMicrosoft MVPVisual Developer - Scripting 牟田口 大介 2006/08/18 |
![]() |
|
|
|
日付処理関数 その1(日時を取得する)
これまで大きく分けて文字列と数値を扱う関数を見てきたが、今回の最後に日付と時間を扱う関数を取り上げる。
まず、現在の日時を取得するNow、Date、Time関数を見ていこう。
Option Explicit |
このスクリプトを実行すると、次のメッセージ・ボックスが表示される。
![]() |
| Now、Date、Time関数の実行例 |
| 今日の日付といまの時刻を取得している |
このように、Now関数は現在の日付(年月日)と時刻(時分秒)を、Date関数とTime関数はそれぞれ日付と時刻を返す。これらの関数は日付型の値を返すが、MsgBox関数の引数としているので文字列型に変換されて表示される。
実際にコードを書く際には、現在の日時すべてではなく、いま何時か、あるいは、今日は何月か、といった、日時の一部の値が必要となることが多い。そのために用意されているのが、日付から年、月、日を得るYear関数、Month関数、Day関数と、時刻から時間、分、秒を得るHour関数、Minute関数、Second関数である。例を挙げよう。
Option Explicit |
スクリプトの実行結果は次のとおり。
![]() |
| Month関数、Day関数の実行例 |
| 現在の日時から月と日の情報を抜き出して表示している。 |
この例では、Now関数の戻り値をdtmNow変数(接頭辞dtmはDateTimeの略)に代入し、その値から月と日の値を抜き出して表示している。なお、時間や分、秒を取得したいなら、同様にHour、Minute、Secondの各関数を使えば可能となるので、各自確認してもらいたい。
日付処理関数 その2(曜日を取得する)
日付を扱うときに必要となることが多いのが、曜日に関する情報だ。VBScriptには引数に指定した曜日を数値として取得するWeekday関数と、曜日を示す数値から曜日名(「月曜日」など)を取得するWeekdayName関数が用意されている。
Option Explicit |
実行結果は次のとおり。
![]() |
| Weekday関数、WeekdayName関数の実行例 |
| 指定した日の曜日を求めて表示している。 |
ここで関数の説明に入る前に、日付リテラルの説明をしよう。これまでに文字列リテラル、数値リテラルを利用してきたが、日付型にも同様に特定の日付や時刻を示す日付リテラル、時刻リテラルが存在する。日付、時刻リテラルは##(シャープ)でくくるのがルールだ。なお、例のほかに#Jan 1 2007#などの表記も受け付ける。#2007/01/01 12:00#のように時刻を併記することも可能である。余談だが、年月日を数値でそれぞれ指定すると日付型の値を返すDateSerial関数を使って、DateSerial(2007, 1, 1)のようにしてもよい。
これらの値をMsgBox関数などで表示するときは、コントロールパネルの「地域と言語のオプション」で設定した形式("yyyy/MM/dd"など)になる。
さて本題だが、Weekday関数は引数に指定した曜日を示す数値を返し、その値をWeekdayName関数の引数とすることで曜日名が得られる。これらの関数には、1週間の最初の日を何曜日にするかを指定する引数や、その引数に指定する曜日を意味する定数が用意されているので、余裕があればヘルプを見てもらいたい。
日付処理関数 その3(日時を計算する)
次に日時の計算をする例を見ていこう。
Option Explicit |
実行結果は次のとおり。
![]() |
| DateDiff関数、DateAdd関数の実行例 |
| 2つの日時の間隔や任意の時間を加算・減算した日時を求められる。 |
まず計算の前に、和暦を扱う方法を述べる。先ほど説明した日付リテラルには和暦を指定することはできないが、和暦を示す文字列をDateValue関数で日付型に変換することができる。"S53-5-26"などの省略した形式も認識する。もちろんDateValue関数は"1978/5/26"などの西暦も指定できる。
さて、DateDiff関数は、2つの日付・時刻の間隔を求める関数で、これらはそれぞれ第2引数と第3引数に指定する。第1引数には、次の表のように、日付や時間などの間隔を示す文字列を指定する。
| 設定値 | 内容 |
| yyyy | 年 |
| q | 四半期 |
| m | 月 |
| y | 年間通算日 |
| d | 日 |
| w | 週日 |
| ww | 週 |
| h | 時 |
| n | 分 |
| s | 秒 |
| DateDiff関数などの第1引数に指定する文字列の意味 | |
ここでは年齢を求めたいので、年を意味する"yyyy"を指定している。するとdtmMyBirthdayとDate(今日)の間隔が年の単位で返され、結果として年齢が求められるというわけである。
ある日時に時間を加算あるいは減算するときに用いるのがDateAdd関数だ。第1引数にはDateDiff関数と同じく追加する時間間隔の単位を指定し、第2引数に加える値を指定、第3引数に基準となる元の日時を記述する。ここでは、dtmMyBirthdayの80年後の年月日を求めている。減算するとき、すなわちある日時からさかのぼった日時を計算するには、第2引数に負の数(−1など)を指定するとよい。なお、lngAge変数の接頭辞は長整数型 (Long)を意味している。
最後に1つ、日付処理関数を用いた例題を出そう。日付が例えば#2006/8/7#なら、その日付から"20060807"という8けた数字の文字列を返して表示するコードを考えてもらいたい。また、その逆、例えば"20151021"という8けた数字の文字列から#2015/10/21#という日付型の値を返すのにも挑戦しよう。どちらも、文字列処理関数を併用する。
Option Explicit
|
スクリプトの実行結果は次のようになる。
![]() |
![]() |
| 日付と数字の文字列の相互変換 | |
| 左:日付→数字の文字列、右:数字の文字列→日付、の実行結果である。 | |
少し難しかったかもしれないが、お分かりになっただろうか?
日付型のデータから数字の文字列を得る方では、8けたの文字列を取得するために、Month、Day関数の戻り値の左に"0"という文字列を足し、Right関数を使い、右から2文字を取ることで実現している。こうすることで、月、日がそれぞれ10未満の場合、10以上の場合どちらにも対応できる。
数字の文字列から日付型のデータを得る方では、最初にLeft、Mid、Right関数を用いて文字列を年月日に切り分け、それをDateSerial関数に渡すことで実現している。DateSerial関数は引数として数値型を取るが、"2015"のような文字列はそのまま2015という数値に変換され、解釈される。このようなデータ型の変換は暗黙に行われるが、次回、明示的な変換も含めて、データ型について詳細に解説する予定である。
■
今回は、文字列、数値、日付を扱う関数を取り上げ、それらを単独、あるいは組み合わせることで、さまざまな用途に利用可能なことを示した。次回は、今回説明を省略したデータ型についての説明と、データ型を処理する関数群を取り上げる。また、VBScriptを理解するうえで欠かせない知識となる「配列」とそれらを扱うステートメントを取り上げる。![]()
| INDEX | ||
| [基礎解説]チェック式 WSH入門 | ||
| 第4回 関数を使いこなす(その1) 文字列、数値、日付を扱う関数 | ||
| 1.VBScriptの関数を使いこなそう | ||
| 2.文字列処理関数を使いこなす | ||
| 3.数値演算関数を使いこなす | ||
| 4.日付処理関数を使いこなす | ||
| 基礎解説 |
ホワイトペーパー(TechTargetジャパン)
- WindowsTIPS (2010/3/19)
− [シャットダウン]ボタンの設定を変更する
− WINSサーバをインストールする
− WINSサーバをnetshコマンドで管理する - Windows 7のファイアウォール機能 (2010/3/18)
Win 7のファイアウォールの概要解説。ルールセットを切り替えるプロファイル機能が強化され、ドメインでもVPNでも、適切なルールが自動選択される - 第212話 プリンタ用紙 (2010/3/16)
致命的なディスク・クラッシュが起きる確率は、クラッシュによってもたらされる被害の大きさに比例する… - WindowsTIPS (2010/3/12)
− 不要なアドオンを無効化してIE8の起動を高速化する
− IE8のソース表示エディタを変更する
− RRASのNATでポートマッピングを定義する
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |













