ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】年月日を進めたり戻したり比べたり。

f:id:yasushiito:20190403184928p:plain

日時を扱う。

プログラムで日時を扱うケースはたくさんあります。
ファイルを作成するときにファイル名を年月日に基づいたものにするなどです。
AutoHotkeyでも日時は使えます。

日時を扱うときは14桁の数字の羅列で行います。
AutoHotkeyではYYYYMMDDHH24MISSというフォーマットというようです。
年月日時分秒をハイフンやスラッシュで区切らずに表記したものです。

ahkwiki.net

代入するときは文字列で放り込むと良いと思います。
任意の日時を変数に代入することができます。

date1 := "20040301153050"

myahk/testdate.ahk at master · yasushiito/myahk

現在時刻を調べる。

現在の日時を取得するには組み込み変数A_Nowを参照します。
もちろん先ほどのYYYYMMDDHH24MISSフォーマットで帰ってきます。

today := A_Now
MsgBox , , 今日の日時 , % today ,5

myahk/testdate.ahk at master · yasushiito/myahk

日時だけでなく、月だけ時間だけなどのように個別に取得する組み込み変数もあります。
曜日を数字や文字列で参照することもできます。
詳しくはリファレンスを参照してください。

ahkwiki.net

スラッシュで区切って整形。

YYYYMMDDHH24MISSフォーマットはプログラムで使いやすいですが人間にとっては読みづらいです。
FormatTime コマンドを使えば、日時を読みやすい形に変換することができます。
今回は日時を表示しないので、このコマンドについては試しません。

ahkwiki.net

スラッシュなどで区切られた日時を解釈(parse)するコマンドは備わっていませんが、ネットを探せばサブルーチンを見つけられます。

github.com

日時の計算。

EnvAddコマンドで変数に入った日時を加算減算できます。
つまり、 昨日とか明日の日付を取得できます。
もちろん30分後とか100時間前などもできます。

このコマンドは日時の計算専用のコマンドではありませんので、日時を計算したい時は第三引数で計算したい項目を指定します。
Seconds Minutes Hours Daysのいずれかを指定します。

;現在の日時を参照する。
today := A_Now
MsgBox , , 今日の日時 , % today ,5
;日時を翌日にずらす。
EnvAdd, today, 1, Days
MsgBox, , 明日, % today ,5
;日時を来月にずらす。
EnvAdd, today, 31, Days
MsgBox, , 来月に進めると一日に遡る, % today ,5

;現在の時刻から昨日の日付を得る。
today := A_Now
EnvAdd, today, -1, Days
MsgBox, , マイナスの時は過去に遡って計算できる, % today ,5

myahk/testdate.ahk at master · yasushiito/myahk

Addですが負の値を与えれば減算で動きます。
もちろんEnvSub というコマンドもありますので符号を反転しなくても減算できます。

ahkwiki.net

心配しなくても月またぎの時は1日に遡ってくれます。
うるう年も扱ってくれます。

日時の差を取る。

二つの日時があるとき、それぞれを変数に入れれば日時の差を取ることができます。
小さい日時から大きい日時を 引くとマイナスで返してくれます。
その結果を比較すれば、 どちらが後の時間か分かりますね。

;二つの年月日の計算。
date1 := "20040301"
date2 := "20040229"
EnvSub,   date1, date2,Days
MsgBox, , 二つの日付の差を取れる, % date1 ,5

;小さい日付から大きい日付を引いてみる。
date1 := "20040301"
date2 := "20040229"
EnvSub, date2, date1,Days
MsgBox, , マイナスの日付の差も取れる, % date2 ,5
if date2 < 0
    MsgBox, , 日時の比較結果。, date1 は date2よりも新しいです。 ,5

myahk/testdate.ahk at master · yasushiito/myahk

追記。

単純に二つの日時を比べるならDateDiffというコマンドがあることを知りました。
こちらの方が便利ですね。

lexikos.github.io


この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら