0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ISO8601形式で一カ月分の日付を生成する

Last updated at Posted at 2021-01-04

月の集計で使う日付文字列を作りたい

JSONの日付部分だけ置き換えて一か月分のデータ集計をするため、日付文字列を生成したい。
先にカレンダーをリテラルで用意したり、毎日分雑に31回決め打ち処理…はかっこわるいので、日付関係のオブジェクトを利用する。西向く侍もうるう年も心配ないようにする。

ISO8601形式

日付表現は日付+時刻のISO8601形式を使う。
日付の取り扱いでよく使う形式。詳しくは省略。

ISO8601
20210104T00:00:00      #基本
2021-01-04T00:00:00    #拡張

DateTimeオブジェクトの生成

DateTimeオブジェクトの生成
$Year = "2021"
$Month = "1"        #"01"でなくてもよい
$Day = "1"

$Date1 = Get-Date -Year $Year -Month $Month -Day $Day
$Date1.GetType()    #DateTime型
$Date1              #時刻は現在時刻になる

$Date2 = New-Object DateTime $Year,$Month,$Day
$Date2.GetType()    #DateTime型
$Date2              #時刻は00:00:00になる

Get-Dateコマンドレット、またはNew-Object DateTimeで年月日を指定してDateTimeオブジェクトを生成する。
Get-Dateコマンドレットだと指定しない時刻部分はシステムの現在時刻になる。
New-Object DateTimeだと指定しない時刻部分は00:00:00になる。

時刻は主に00:00:00で使うのでNew-Object DateTimeで出したくなるのだが、時刻は時刻で別途指定する場合があるので、生成した日付+時刻から日付部分だけ取り出すことにする。
なので、今回はどちらの方法で生成しても同じである。

日付オブジェクトを一か月分回す

AddDaysメソッドで日付を加算減算できる。月の末日に1日加えると翌月になってくれるので、翌月になったら処理終了にする。

日付を進める
$Year = "2021"
$Month = "1"
$Day = "30"
$Date = Get-Date -Year $Year -Month $Month -Day $Day

$Date               #2021年1月30日
$Date.AddDays(1)    #2021年1月31日
$Date.AddDays(2)    #2021年2月1日

ISO8601拡張形式で一カ月分の日付を生成

ISO8601拡張形式で一カ月分の日付を生成
# ユーザー入力
Write-Output "年と月を入力"
$Year = Read-Host "年 yyyy"
$Month = Read-Host "月 MM"
$Day = "1"
$Date = Get-Date -Year $Year -Month $Month -Day $Day

# 日付の入った配列生成
$ThisMonth = $Date.Month
$Calendar = New-Object System.Collections.ArrayList
while($Date.Month -eq $ThisMonth){
    $Calendar.Add($Date.ToString("yyyy-MM-dd")) > $NULL
    $Date = $Date.AddDays(1)
}

# 配列に文字列型で入っているので、あとから時刻を付け足す

# 表示だけなら
$Calendar | ForEach-Object{
    "${_}T00:00:00"
}
# 2020-01-01T00:00:00
# ~(中略)~
# 2020-01-31T00:00:00
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?