
TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
詳細情報
| • | |
| • | |
| • |
![]()
Scripting Guy さん、よろしくお願いします。ある時刻について、それが朝の時刻か夜の時刻かを見分ける簡単な方法はありますか。
-- HG

HG さん、こんにちは。期待とエネルギーに満ち溢れて、アドレナリンが放出されているという、1 年の中で興奮が渦巻く状態を感じますか。それが意味することはたった 1 つ、年に 1 度の Turducken Bowl の時期がやってきたのです。
毎年恒例になっている Turducken Bowl について聞いたことがないという方もいるかもしれないのでご説明しますが、数年前、このコラムを執筆している Scripting Guy、Scripting Guy の息子、そして 2 人の甥は、感謝祭の日にとても活発な (そしてし激しい) タッチ フットボールの試合をしました。食事をするまでの暇つぶしとして始まった試合でしたが、今では祝日の恒例行事になっています。試合をしているフィールドの広さは関係なく、4 つのダウンが与えられます。1 回のタッチダウンにつき 7ポイントが加算され、先に 100 ポイントを得点したチームが勝ちです。ほとんどの家族行事と同様に、どちらのチームが優勢であるかについてはかなりの論争があります。このコラムを執筆している Scripting Guy の記憶によると、彼のチームは 3 勝 4 敗で負け越しています。
去年の試合はどうだったのか、ですって。ええと、いいですか、大事なのは勝ち負けではありません。参加することで得られる純粋な喜びこそが重要なのです。このコラムを執筆している Scripting Guy が、去年、喜びを実際に経験したということではありません。ましてや純粋な喜びなどは経験していません。去年の試合はどうだったのかということについてですが、こう言えばわかっていただけるでしょう。最初の試合で、このコラムを執筆している Scripting Guy はパスを出しました。チームメイトでクオーターバックを務めていた甥が、ダウンフィールドにボールを投げたところ、フットボールは風に乗ってフェンスを超え、隣人の庭に入ってしまいました。
まさかと思うでしょうが、事態はさらに悪化しました。
残念なことに、今年は去年よりもいい状態になることはないようです。このコラムを執筆している Scripting Guy があえて理解しようとも思わない、変な杓子定規的なやり方によって、今年はチームの登録選手が 1 人づつ増えることになりました。去年の試合で圧勝した Scripting Guy の息子と甥 (フットボールをフェンスの向こうに投げなかった、もう 1 人の甥です) は、Scripting Guy の兄弟のうちの 1 人 (実際にフットボールが得意な Scripting Guy の兄) をチームメイトとして加えることになりました。それと引き換えに、このコラムを執筆している Scripting Guy と甥 (フットボールをフェンスの向こうに投げた甥です) は、重要な Scripting Guys の 1 人をチームメイトとして迎えることになりました・・・。これは公正な取引でしょうか。こう考えてみましょう。これは・・・。
うーん、考えない方がいいかもしれません。これについて言及するのはやめて、これ以上の問題に巻き込まれないようにした方がいいでしょう。
それに、この重要な Scripting Guy が、試合の開始前に足を骨折するかもしれません (そして、そうなることを願っています)。
ほんの冗談ですよ。足が骨折すればいいなんて、だれも思っていません。
足首がねじ曲がったりねんざしても、ちゃんと動くでしょう。
とにかく、このコラムを執筆している Scripting Guy は、チームが世紀の不調をうまくやってのけるための試合の計画を考案するのに忙しいのです。もう何か思い付いたのか、ですって。いいえ、まだです。少なくとも、もう一方のチームの選手全員を誘拐するという選択肢以外は思い付いていません。思い付いたとしても、自分のチームが勝てるという確信が持てません。
このコラムを執筆している Scripting Guy が簡単に考えた戦略の 1 つは、ある時刻が朝と夜のどちらの時刻であるのかを見分けるスクリプトを記述するというものでした。それがフットボールの試合に勝つのにどう役に立つのか解明できなかったので、その戦略はボツになりました。ただし、明るい面を挙げれば、(ご安心ください。私たち Scripting Guys の中には、このことに関する明るい面を必死になって探している人もいます)、その戦略は今日の質問に答えるのに役に立ちました。
dtmTime = #11/21/2007 1:57 PM#
intHour = Hour(dtmTime)
If intHour > 11 Then
Wscript.Echo "This is an afternoon/evening time."
Else
Wscript.Echo "This is a morning time."
End If
そうです。これは、本当にとても単純で短いスクリプトですね (そして、このコラムの執筆が終わったらすぐ退社する必要がある日に、このコラムを執筆している Scripting Guy が非常に単純な短いスクリプトを使用して答えられる質問を選んだことは、単なる偶然に過ぎません)。このスクリプトでは、まず日時値を dtmTime という名前の変数に代入します。念のために申し上げておくと、値の前後にあるシャープ記号 (#) は、これが日時値であって他の種類の値ではないということを VBScript に示すためのものです。
dtmTime = #11/21/2007 1:57 PM#
この時刻が朝 (つまり、正午より前) か、午後および夜 (つまり、正午より後) のどちらの時刻であるのかを知るにはどうしたらよいのかというと、"私たちは" 非常に簡単に知ることができます。何しろ、PM という指定子が値の最後に付いていますから。しかし、"スクリプト" はどのようにしてこれが朝と夜のどちらの時刻であるかを知るのか、というのが問題ですよね。
次にその方法を示します。
intHour = Hour(dtmTime)
ここでは、Hour 関数を使用して日時値のうちの時間の部分だけを取得しています。Hour 関数では、時間を 24 時間形式で表す 0 〜 23 の間の整数値が返されます。つまり、このサンプル スクリプトでは、13 が返されることになります (24 時間の形式だと、午後 1 時 57 分が 13 時 57 分に相当するからです)。あと必要な作業は、返された日時値が 11 よりも大きいかどうかを判断するだけです。
If intHour > 11 Then
これに該当する場合 (つまり、時間が 12 〜 23 の間である場合。12 〜 23 を含む) は、午後および夜の時刻であるということをエコー バックします。これに該当しない場合 (つまり、時間が 0 〜 11 である場合。0 〜 11 を含む) は、これが朝の時刻だということをエコー バックします。これで作業は完了です。
フットボールの試合で勝つための方法をこれくらい簡単に思い付くことができたら良いのですけどね。
この手法を使用するメリットは、この手法が使用している時間形式に関係なく機能するところです。たとえば、次のコード行を使用して、日時値を dtmTime 変数に代入したとします。
dtmTime = FormatDateTime(#11/21/2007 13:57#, vbShortTime)
FormatDateTime 関数によって、この場合は dtmTime 変数の値が 13:57 になります。値の最後に PM が付くことはありません。しかし、これで問題ありません。私たちのスクリプトでは AM と PM 指定子を使用しません。代わりに、時間 (13) を取得して次の処理に向かいます。
向かうと言えば、そろそろ出発して Turducken Bowl の準備をする時間です。先ほど言いましたが、今年の試合は特に、ええと・・・。おもしろいはずです。
まあ、このコラムを執筆している Scripting Guy に幸運の女神が微笑んで、試合開始前に彼の足が骨折するかもしれません。でもきっとそれは高望みのしすぎでしょう。ではまた月曜日にお会いしましょう。
注 : 念のために申し上げておくと、Turducken Bowl は Turducken にちなんで名付けられました。Turducken とは、あひるの中ににわとりを詰め込んで、そのあひるを七面鳥の中に詰め込んで作られ、それを何とかして調理して食べるという、感謝祭の伝説的な料理です。実は、去年、実際に Turducken を食べたことがある読者から電子メールをいただくまでは、これが伝説的な料理だとばかり思っていました。このコラムを執筆している Scripting Guy にとって、Turducken を食べるのは、ビッグフットやネッシーを食べるのと同じようなことです。 ところで、ビッグフットやネッシーを食べたことがある方がいらっしゃる場合はご連絡ください。その経験を、ぜひお聞かせ願いたいと思っています。 米国以外にお住まいの方、七面鳥の中にあひるを詰めてその中ににわとりを詰めるという馬鹿げた考えに困惑している方の疑問に対してお答えしましょう。Turducken は米国限定の伝統料理です。 |