fc2ブログ

(元)社内SEの徒然なる日記

PowerShellで指定した日付を作ってみた(System.DateTime)

■ Get-Date

PowerShellで日付の関係でゴニョゴニュとやるには、Get-Date コマンドレットを使用するのが良いのですが、このGet-Date コマンドレットってのが、特に何も指定しないと現在の日付を作ってしまいます。

例えば、こんな感じで引数を何も渡さずに使用すると...
[System.DateTime]$BeforeReleseDate = Get-Date
Write-Output $BeforeReleseDate

こんな感じで戻ってきます。

2013年12月19日 11:02:56


これはこれでOKなのですが...

■ 日付を指定したい

こいつを使って、**日以前に作成されたファイルを削除、とか使っていたいのですが、今回の要件は「指定した日時以降に更新されたファイルを取得する」だったりするので、この指定日ってのを作ってやる必要が出てきました。

PowerShellのヘルプを見ると簡単に設定できそうだったのですが、念のためにネットで検索すると、それらしい結果が出てきません。どうやら簡単すぎて誰も必要としていないらしいです。

って事で、自分で色々と実験してい見ました。

Get-Date コマンドレットの Dateパラメータを使えば良いらしいです。
# 日時の指定
$BeforeReleseDate = Get-Date -Date '2010/1/5 15:25:31'
Write-Output $BeforeReleseDate

# 時間の指定
$BeforeReleseDate = Get-Date -Date '13:05:04'
Write-Output $BeforeReleseDate

# 日付の指定
$BeforeReleseDate = Get-Date -Date '1999/07/31'
Write-Output $BeforeReleseDate

結果は、こうなりました。

2010年1月5日 15:25:31
2013年12月19日 13:05:04
1999年7月31日 0:00:00


処理を実行した日は、2013/12/19の11:15です。
日時を指定すると、そのまま。時間だけだと、日付は現在の日付、日付だけ指定すると時間は0時になるらしいです。

ちなみに、Dateパラメータは省略しても動くようです。
$BeforeReleseDate = Get-Date '2010/1/5 15:25:31'

これでも、同じ動作をしてくれました。

ちなみに、わざわざ変数を用意してWrite-Output コマンドレットで吐き出しているのは、細々と処理する場合は変数へ格納することが多いでしょうから、これはこれでサンプルになるかなぁと思いまして。
別に、自作のスクリプトから抜粋してきたのを再編集するのが面倒だっただけって訳じゃないですよ。

■ 追加実験

ヘルプを見ると、もっと細かく指定できるらしいので、さらに遊んでみました。

初期値に適当な日付を設定し、後は上から順に年、月、日、時、分、秒と一つずつ値を書き換えていきます。
[System.DateTime]$BeforeReleseDate = Get-Date -Date '0001/1/1 0:0:0'
Write-Output $BeforeReleseDate

[System.DateTime]$BeforeReleseDate = Get-Date -Date $BeforeReleseDate -Year '1999'
Write-Output $BeforeReleseDate

[System.DateTime]$BeforeReleseDate = Get-Date -Date $BeforeReleseDate -Month '12'
Write-Output $BeforeReleseDate

[System.DateTime]$BeforeReleseDate = Get-Date -Date $BeforeReleseDate -Day '23'
Write-Output $BeforeReleseDate

[System.DateTime]$BeforeReleseDate = Get-Date -Date $BeforeReleseDate -Hour '11'
Write-Output $BeforeReleseDate

[System.DateTime]$BeforeReleseDate = Get-Date -Date $BeforeReleseDate -Minute '25'
Write-Output $BeforeReleseDate

[System.DateTime]$BeforeReleseDate = Get-Date -Date $BeforeReleseDate -Second '58'
Write-Output $BeforeReleseDate

実行結果は、この通りです。

0001年1月1日 0:00:00
1999年1月1日 0:00:00
1999年12月1日 0:00:00
1999年12月23日 0:00:00
1999年12月23日 11:00:00
1999年12月23日 11:25:00
1999年12月23日 11:25:58


なかなか、面白い状態になりました。

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する