bashスクリプトなどunix圏でよく使われているスクリプトをPowersehllに移植しようとしたころUNIXTIMEに遭遇しました。
UNIXTIMEは日時を1970/1/1 0:0:0からの秒数として表現するのですが、PowershellのGet-Dataから変換するメソッドはなさそうです。
調べたところ1970/1/1 0:0:0のオブジェクトを作成し現在の時刻との差の秒数を計算することで出来るようです。
[int]((Get-Date) - (Get-Date("1970/1/1 0:0:0 GMT"))).TotalSeconds
ロジックが非常にストレートな表現になっており、わかりやすいのですが、変換するメソッドがあってもよさそうな気もします。
そういえばPowerShellで既存オブジェクトにメソッドを追加する方法があったような気がします。
$d = Get-Date | Add-Member -MemberType ScriptMethod -Name "ToUnixTime" -Value {
[int](($this) - (Get-Date("1970/1/1 0:0:0 GMT"))).TotalSeconds
} -Force -PassThru
$d.ToUnixTime()
メソッドを追加することが出来ました。
個人的に機能として存在は知っていても使う場面に遭遇したことの無い機能の一つです。そういえば、JavaScriptのオブジェクトなんかはこんな感じでメソッドやプロパティを追加してプログラミングをしているような気がしましたが、Powershellではclassを定義できるので、classを継承したり委譲するのに比べてどうなのでしょうか?オブジェクトを生成するひな形してclassから多量にオブジェクトを生成するのではなく、局所的に機能を追加するのであれば使い道もあるかもしれません。
コメント