2013年3月31日日曜日

[Powershell] 日付計算とか日付に関するあれこれ

いきなり仕事でPowerShellいじってと言われてちょっと困惑、
プログラム触れてちょっと嬉しいTearTheSkyです。

久しぶり過ぎて忘れまくっているんですが…
どのプログラムでも必要になる、日付計算

まずPowerShellで日付を取得するのはget-dateコマンドです。
PS C:\Users\TearTheSky> Get-Date

2013年3月31日 11:41:11

こちらのサイトを参考にさせていただいたんですが、
PowerShell/Get-Dateで前日、翌日、前月、翌月などの日付を取得する方法

PowerShelだと日付型のオブジェクトに対して、
addDays
addMonths
addYears
といったプロパティが利用できるようです。

以下のようにすると、面倒くさい日付計算なしに、
1ヶ月前の日付を取得することが可能です。

PS C:\Users\TearTheSky> (Get-Date).addMonths(-1)

2013年2月28日 12:10:32


これはすごく便利ですね。

で、問題はここからで、


こーいう風に変数に入れたくなるじゃないですか。

PS C:\Users\TearTheSky> $lastmonth = (Get-Date).addMonths(-1)


そしたらこういう風に表示されますよね。

PS C:\Users\TearTheSky> $lastmonth



2013年2月28日 21:05:21


で、今のままだと$lastmonthはdate型だから、文字列型…stringにしたいと思うじゃないですか。
それでこうしてみたんです。


PS C:\Users\TearTheSky> [string]$lastmonth = (Get-Date).addMonths(-1)

PS C:\Users\TearTheSky> $lastmonth

02/28/2013 21:05:46

PS C:\Users\TearTheSky>


!?

いや、アメリカ式表記にしなくていいから!

そこで思い返りました。
俺が欲しいのって、yyyymmdd形式の8桁の情報だよな…と言うことは
こうすれば…


PS C:\Users\TearTheSky> $lastmonth = (Get-Date -format "yyyyMMdd").addMonths(-1)

[System.String] に 'addMonths' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。

発生場所 行:1 文字:53

+ $lastmonth = (Get-Date -format "yyyyMMdd").addMonths <<<< (-1)

    + CategoryInfo          : InvalidOperation: (addMonths:String) []、RuntimeException

    + FullyQualifiedErrorId : MethodNotFound


!?

まじかよ…

PS C:\Users\TearTheSky> (Get-Date -format "yyyyMMdd").gettype().fullname

System.String

-format スイッチを使うと、戻り値は文字列型になっちゃいます!

めんどくせえ…('A`)

ということで、結局こうしました。

PS C:\Users\TearTheSky> $lastmonth = (Get-Date).addMonths(-1)
PS C:\Users\TearTheSky> [string]$lastmonth = (Get-Date).addMonths(-1)
PS C:\Users\TearTheSky> $lastmonth = $lastmonth.substring(6,4) + $lastmonth.substring(0,2) + $lastmonth.substring(3,2)
PS C:\Users\TearTheSky> $lastmonth
20130228

やったね☆(ゝω・)v

2 件のコメント:

  1. (Get-Date).addMonths(-1).ToString("yyyyMMdd")

    返信削除
  2. おお!ありがとうございます!またよろしくお願いします!

    返信削除