« コマンドラインで、フォルダとファイルを判別する。 | トップページ | 筆者に連絡する。 »

2006年9月20日 (水)

現在の日時を何回も取り出さないこと!

現在の日付と時刻を別々に取り出したり、
日時の形式を加工するときに、現在の日時を複数回参照しそうですが、それらは間違いです。

VBScriptで、

MsgBox Date & " " & Time

MsgBox Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日" & Hour(Now)  & "時" & Minitue(Now)  & "分" & Second(Now) & "秒"

コマンドラインで、

ECHO %DATE% %TIME%

ECHO %DATE:~-10,4% & "年" & %DATE:~-5,2% & "月" & %DATE:~-2% & "日" & %TIME:~0,2% & "時" & %TIME:~3,2%  & "分" & %TIME:~5,2% & "秒"

これらはすべて間違いです。もし、業務システムで使用すると障害です。

例えば、MsgBox Date & " " & Timeでは、
2006/09/20 23:59:59に、Dateが実行され、
2006/09/21 00:00:00に、Timeが実行されると、
表示は、2006/09/20 0:00:00となって、実際の時刻から24時間ずれます。

個人利用の範囲では、コストとリスクのトレードオフを勘案して選択します。

正しくは以下のようにします。

dt=Now
MsgBox Year(dt) & "年" & Month(dt) & "月" & Day(dt) & "日" & Hour(dt)  & "時" & Minitue(dt)  & "分" & Second(dt) & "秒"

Do
  d=Date
  t=Time
Loop Until d=Date
MsgBox d & " " & t

:LOOP
SET d=%DATE%
SET t=%TIME%
IF NOT %d%==%DATE% GOTO :LOOP
ECHO %d% %t%
ECHO %d:~-10,4% & "年" & %d:~-5,2% & "月" & %d:~-2% & "日" & %t:~0,2% & "時" & %t:~3,2%  & "分" & %t:~5,2% & "秒"

また、[yy]yymmddhhmmss形式にするときなど、
ゼロサプレスの配慮では、文字列操作より数値演算を利用するとよいでしょう。

yymmdd=Right(CStr(Year(d)*10000+Month(d)*100+Day(d)),6)
yyyymmdd=Right(CStr(100000000+Year(d)*10000+Month(d)*100+Day(d)),8)
hhmmss=Right(CStr(1000000+Hour(t)*10000+Minute(t)*100+Second(t)),6)

SET yyyymmdd=%d:~-10,4%%d:~-5,2%%d:~-2%

SET hhmmss=%t:~0,2%%t:~3,2%%t:~6,2%
SET /A hhmmss+=1000000
SET hhmmss=%hhmmss:~1%

« コマンドラインで、フォルダとファイルを判別する。 | トップページ | 筆者に連絡する。 »