正午は、何時?
訳あって、12時間制の時間を取得するという処理が必要になった。
こんなの簡単だろうと思ったわけです。
要は、時間を12で割った余りを取得すればよいと・・・
intHour = Hour(Now()) Mod 12
さて、確認のために Excel の条件書式で表示した内容と比べてみます。
時刻を12時間表記するには、以下の様に書式設定ます。
yyyy/mm/dd AM/PM hh:mm:ss
この書式を使って、2022/06/10 00:00:00
を12時間制で表示すると2022/06/10 AM 12:00:00
に・・・
???AM 12時???
あぁ、あれでしょ、日本と海外じゃ違うからね。
じゃあ、条件書式を[$-ja-JP]yyyy/mm/dd AM/PM hh:mm:ss
にしてみたらどうよ。
2022/06/10 午前 12:00:00
・・・えー、マジですか・・・
私はテレビは持っていませんが(だから受信料は払ってませんが)、Echo Dot でNHKラジオのニュースは聞くんです。
ニュースの更新が追い付いていないのか、朝7時頃に聞くと、夜中のニュースが流れるのですが、その時のアナウンスは
「午前0時になりました、NHKのニュースをお伝えします」
と言う感じで始まります。
ちなみにExcelでは24時間制で言う所の12時(正午)は2022/06/10 午後 12:00:00
です。
つまり、Excel上での12時間制表記には「午前0時」や「午後0時」は存在しない!?
ゼロを発見したインド人は凄い
いや、まぁ、Excel の12時間制で 0時 が出てこないのは、そういう理由じゃないでしょうね。
そも、ゼロを発見したのがインド人じゃないかもしれませんし・・・
余談
先ほど、商の余りを求めるのにmod
を使いましたが、それと並んで便利な演算子が\
(バックスラッシュ、日本語フォントだと¥)です。
整数の商を求めます。
以下の様に、時間の前に「AM・PM」や「午前・午後」を付けるのも、「\」を使えば簡単にできます。
strHour = IIf(Hour(Now()) \ 12 = 1, "午後", "午前") & CStr(Hour(Now()) Mod 12)
バックスラッシュだと普段除算に使う「/」と形が似ているので、覚えやすいですよね。
日本語の「¥」はこういう時ちょっとどうかと思うけど・・・
さらに余談
たかだか 12時間制の時間を取得する だけで、「(24時間制の)0時と12時の時、どうするんですか?」と仕様を確認しなきゃいけないの、面倒。
その前に、何で24時間制にしなかったのかな、このシステム・・・