こんにちはますのです。
先日AzureのAutomationで祝日判定の日付で一桁の時にうまくいかない…。という事象にあいました。
Azure Automation:祝日判定をして仮想マシンの自動起動/停止をする
原因確認で検証をしていると、変数に格納されている値とGet-Dateで取得している値が異なっているようでした。
・変数:2020/11/3
・Get-Date:2020/11/03
変数への格納は内閣府のWebサイト上のデータをダウンロードして登録するので、変換は骨が折れそうや。
他人様が作成したPowerShell読み解くのしんどいわぁ。Get-Dateで取得する値でどうにかならんかねと思ったらあるやないのということでした。調べてみるものですね。
やりたいことのゴール
Get-Dateで取得した日付を「2020/1/1」の表記とする。
一桁の月日に対しては「0」がつかないようにしたい。
辿りついた「Get-Date -Format」の使い方
月と日を一桁に表示したい場合は「-Format」を使って「M/d」を1つずつにすると出来るようです。
> Get-Date -Format "yyyy/M/d"
2020/11/7
意外と簡単でした。
ちなみに月が一桁か分からんやんという方には「.adddays」「.addmonths」を使っての確認をオススメします。
#2日後
> (Get-Date).AddDays(+2)
2020年11月7日 22:33:53
#2ヶ月後
> (Get-Date).AddMonths(+2)
2021年1月7日 22:34:13
#マイナスも出来るよ
> (Get-Date).AddMonths(-2)
2020年9月7日 22:34:32
#フォーマットを指定して確認することも出来るよ
Get-Date (Get-Date).AddMonths(+2) -format yyyy/MM/dd
2021/01/07
Get-Dateのその他オプション
> Get-Date -Format d
2020/11/07
> Get-Date -Format D
2020年11月7日
> Get-Date -Format f
2020年11月7日 23:59
> Get-Date -Format g
2020/11/07 23:59
ログ出力で利用出来る形にするには、先ほどの「-Format」を利用すると良いです。
> Get-Date -Format "yyyy/MM/dd HH:mm:ss"
2020/11/08 00:07:06
時間の出力は「hh」とすると「12時間表記となるため、0時=12時と表示されるようです。
個人的には気持ち悪いので「HH」として24時間表記が良いなと。
フォーマットの出力形式の表記の一覧はこんな感じです。
記号 | 値 |
yyyy | 年(4 or 2桁) |
MM | 月(1-2桁) →M:1桁(例:1月) →MM:2桁(例:01月) |
dd | 日(1-2桁) →d:1桁(例:1日) →dd:2桁(例:01日) |
ddd | 曜日(省略形) 例:月、火… |
dddd | 曜日 例:月曜日、火曜日… |
HH | 時(1-2桁/24時間制) |
hh | 時(1-2桁/12時間制) |
mm | 分(1-2桁) |
ss | 秒(1-2桁) |
色々とPowerShellで処理をすると、必ずこのコマンド使っているのです。
ただ頻繁に触っているわけでは無く忘れてしまうので、メモとして残しておくと幸せになれると信じています。
ただ頻繁に触っているわけでは無く忘れてしまうので、メモとして残しておくと幸せになれると信じています。