Get-Dateコマンドレット

現在時刻を取得するコマンドレットにGet-Dateがある。日付の取得や、日付データの加工はスクリプトを作成する際にもよく利用する機能だ。PowerShell Coreでは日付をただの文字列としてではなく日付データとして柔軟に利用できる。

例えばログデータを作成する場合には日付データは必須といえるし、ファイル名に日付や時刻を含めるという作業もよくやることだ。

Get-Dateコマンドレットを使うことでこうした日付データを取得することができる。まずはこの基本的なコマンドレットの使い方を身につけてしまおう。

現在時刻を取得

Get-Dateコマンドレットを引数なしで実行すると次のように現在時刻に基づく日時データが表示される。

現在時刻を取得

PS /Users/daichi> Get-Date

2018年6月20日 水曜日 17:05:05


PS /Users/daichi>

これがGet-Dateコマンドレットの基本的な使い方だ。

出力形式を指定

日付データを利用する場合、大抵は必要になるフォーマットに則った形で出力する必要がある。Get-Dateコマンドレットにはこの目的で-Formatおよび-UFormatというオプションが用意されている。

-FormatはWindows形式での日付フォーマットの指定、-UFormatはUNIX dateコマンド形式での日付フォーマットの指定となる。

-FormatでWindows形式の日付フォーマット指定をおこなった場合

PS /Users/daichi> Get-Date -Format "yyyy年MM月dd日 dddd HH時mm分ss秒 zz"
2018年06月20日 水曜日 17時45分11秒 +09
PS /Users/daichi>

-UFormatでUNIX dateコマンド形式の日付フォーマット指定をおこなった場合

PS /Users/daichi> Get-Date -UFormat "%Y年%m月%d日 %A %H時%M分%S秒 %Z"
2018年06月20日 水曜日 17時47分50秒 +09
PS /Users/daichi>

-Formatおよび-UFormatで指定できる主なフォーマットをまとめると次のようになる。

-Format -UFormat 意味
yyyy %G 年(4桁)
yy %g 年(下2桁)
MM %m 月(数字)
MMM %bまたは%h 月(短縮表記)
MMMM %B 月(対象ロケールでの表記)
dd %d
HH %H 時(24時間表記)
hh %I 時(12時間表記)
mm %M
ss %S
tt %p 午前または午後
dddd %A 曜日
ddd %a 曜日(短縮表記)
zz %Z タイムゾーン

慣れている方を使えばよいだろう。LinuxやmacOS、Windowsが混在した環境を使っているなら、-UFormatを覚えておくとmacOS/Linuxでも応用が効くようになるのでよいかもしれない。

実は、これらのオプションで指定できるフォーマットはもっとたくさんある。詳しく知りたい場合は、GetDateCommand.csのソースコードを見てほしい。執筆段階では332行目あたりからのコードを読むと、-Formatと-UFormatの相互関係がよくわかるだろう。

指定した日時で表示

日付データを出力するケースでは、現在時刻ではなく指定した日時で日付データを出力したいということがよくある。Get-Dateコマンドレットでは引数に日付を書いて渡すと、その文字列を日付データとして解析してデータを生成し、表示してくれる。

指定した日時で日付データを出力

PS /Users/daichi> Get-Date 2018/01/01

2018年1月1日 月曜日 0:00:00


PS /Users/daichi> Get-Date "2018/01/01 08:10:30"

2018年1月1日 月曜日 8:10:30


PS /Users/daichi>

指定できるフォーマットはロケール毎に異なるが、日本でよく使われている表記を真似て指定すれば大抵は問題なく通るだろう。

日付の足し算や引き算、日付データの演算など

LinuxやmacOSではdateコマンドで似たようなことができるが、あくまでも文字列が出力されるだけなので、文字列としてデータを扱う必要がある。しかし、PowerShell Coreは一見するとUNIXのシェルスクリプトのようだが、プログラミング言語としての側面を備えており、日付データを演算することができる。

詳しくは次回以降で取りあげるが、たとえば次のように現在時刻から2週間後、または2週間前といった指定でデータを作成することができる。

日付データの加算と減算

PS /Users/daichi> Get-Date

2018年6月20日 水曜日 17:56:31


PS /Users/daichi> (Get-Date).AddDays(14)

2018年7月4日 水曜日 17:56:44


PS /Users/daichi> (Get-Date).AddDays(-14)

2018年6月6日 水曜日 17:57:10


PS /Users/daichi>

日付データを変数に代入してから、次のように演算することもできる。

日付データを変数に代入してから演算

PS /Users/daichi> $start = (Get-Date).AddDays(-14)
PS /Users/daichi> $end = Get-Date
PS /Users/daichi> $start - $end


Days              : -14
Hours             : 0
Minutes           : 0
Seconds           : -15
Milliseconds      : -665
Ticks             : -12096156654360
TotalDays         : -14.0001813129167
TotalHours        : -336.00435151
TotalMinutes      : -20160.2610906
TotalSeconds      : -1209615.665436
TotalMilliseconds : -1209615665.436



PS /Users/daichi> $end - $start


Days              : 14
Hours             : 0
Minutes           : 0
Seconds           : 15
Milliseconds      : 665
Ticks             : 12096156654360
TotalDays         : 14.0001813129167
TotalHours        : 336.00435151
TotalMinutes      : 20160.2610906
TotalSeconds      : 1209615.665436
TotalMilliseconds : 1209615665.436



PS /Users/daichi>

Get-Dateの出力をパイプラインでGet-Memberに接続すると、次のような出力を得ることができる。Get-Dateで出力されるデータをさまざまな方法で操作できることがわかる。

DateTimeのメソッドとプロパティ

PS /Users/daichi> Get-Date | Get-Member


   TypeName: System.DateTime

Name                 MemberType     Definition
----                 ----------     ----------
Add                  Method         datetime Add(timespan value)
AddDays              Method         datetime AddDays(double value)
AddHours             Method         datetime AddHours(double value)
AddMilliseconds      Method         datetime AddMilliseconds(double value)
AddMinutes           Method         datetime AddMinutes(double value)
AddMonths            Method         datetime AddMonths(int months)
AddSeconds           Method         datetime AddSeconds(double value)
AddTicks             Method         datetime AddTicks(long value)
AddYears             Method         datetime AddYears(int value)
CompareTo            Method         int CompareTo(System.Object value), int CompareTo(datetime value), int...
Equals               Method         bool Equals(System.Object value), bool Equals(datetime value), bool IE...
GetDateTimeFormats   Method         string[] GetDateTimeFormats(), string[] GetDateTimeFormats(System.IFor...
GetHashCode          Method         int GetHashCode()
GetObjectData        Method         void ISerializable.GetObjectData(System.Runtime.Serialization.Serializ...
GetType              Method         type GetType()
GetTypeCode          Method         System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
IsDaylightSavingTime Method         bool IsDaylightSavingTime()
Subtract             Method         timespan Subtract(datetime value), datetime Subtract(timespan value)
ToBinary             Method         long ToBinary()
ToBoolean            Method         bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte               Method         byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar               Method         char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime           Method         datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal            Method         decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble             Method         double IConvertible.ToDouble(System.IFormatProvider provider)
ToFileTime           Method         long ToFileTime()
ToFileTimeUtc        Method         long ToFileTimeUtc()
ToInt16              Method         int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32              Method         int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64              Method         long IConvertible.ToInt64(System.IFormatProvider provider)
ToLocalTime          Method         datetime ToLocalTime()
ToLongDateString     Method         string ToLongDateString()
ToLongTimeString     Method         string ToLongTimeString()
ToOADate             Method         double ToOADate()
ToSByte              Method         sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToShortDateString    Method         string ToShortDateString()
ToShortTimeString    Method         string ToShortTimeString()
ToSingle             Method         float IConvertible.ToSingle(System.IFormatProvider provider)
ToString             Method         string ToString(), string ToString(string format), string ToString(Sys...
ToType               Method         System.Object IConvertible.ToType(type conversionType, System.IFormatP...
ToUInt16             Method         uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32             Method         uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64             Method         uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
ToUniversalTime      Method         datetime ToUniversalTime()
DisplayHint          NoteProperty   DisplayHintType DisplayHint=DateTime
Date                 Property       datetime Date {get;}
Day                  Property       int Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       int DayOfYear {get;}
Hour                 Property       int Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       int Millisecond {get;}
Minute               Property       int Minute {get;}
Month                Property       int Month {get;}
Second               Property       int Second {get;}
Ticks                Property       long Ticks {get;}
TimeOfDay            Property       timespan TimeOfDay {get;}
Year                 Property       int Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version 1; $this....


PS /Users/daichi>

Get-Dateで取得できるデータはそれだけでさまざまな加工が可能だ。プログラミング言語を学ぶつもりはないが、日付データの処理をちょいちょいっと自動化したい方もいるだろう。そういったニーズにもPowerShell Coreは応えてくれるので便利だ。

参考資料