【Powershell】時間の足し算

HH24:MM形式で足し算

Excelに実績時間などを記入する際、1:30という風に記入することもあると思います。
powershellでその値を取得して加算したい時があったので残しておきます。

今回やりたいのは例えば残業1:30、 深夜残業1:00と記入していた場合
この日の合計残業時間は2:30のフォーマットで取得したいということです。

powershellはDate型だと足し算してくれるので(+記号で時間が加算できる) ←この時点ですごい!!
例えばExcelのCell(1.1)に1:30 Cell(1,2)に1:00と記入していた場合

#セル1,1の値を取得 残業
#.Textで値を取得
$zangyo = sheet.Cells.Item(1,1).Text
#セル1,2の値を取得 深夜残業
$shinyaZangyo  = sheet.Cells.Item(1,2).Text
#一日の残業の合計
$sumZangyou  = $zangyo + $shinyaZangyo

でやろうとすると、
f:id:topvalue:20180108205035j:plain

System.TimeSpanに変換できませんでした。とエラーになります。

そこで、素直に加算したい値どうしを[TimeSpan]型に変換します。

#セル1,1の値を取得 残業
#.Textで値を取得
$zangyo = sheet.Cells.Item(1,1).Text
#TimeSpan型に変換
$tsZangyo = [TimeSpan]$zangyo 
#セル1,2の値を取得 深夜残業
$shinyaZangyo  = sheet.Cells.Item(1,2).Text
#TimeSpan型に変換
$tsShinyaZangyo = [TimeSpan]$shinyaZangyo
#一日の残業の合計
[TimeSpan]$tsSumZangyou  = $zangyo + $shinyaZangyo

上記のようすると合計値が2:30と取得できます。

TimeSpan型の中身を見てみると
$tsZangyo =
Days : 0
Hours : 1
Minutes : 30

Seconds : 0
Milliseconds : 0
Ticks : 54000000000
TotalDays : 0.0625
TotalHours : 1.5
TotalMinutes : 90
TotalSeconds : 5400
TotalMilliseconds : 5400000

$tsShinyaZangyo =
Days : 0
Hours : 1
Minutes : 00

Seconds : 0
Milliseconds : 0
Ticks : 54000000000
TotalDays : 0.0625
TotalHours : 1.5
TotalMinutes : 90
TotalSeconds : 5400
TotalMilliseconds : 5400000

$tsSumZangyou =
Days : 0
Hours : 2
Minutes : 30

Seconds : 0
Milliseconds : 0
Ticks : 54000000000
TotalDays : 0.0625
TotalHours : 1.5
TotalMinutes : 90
TotalSeconds : 5400
TotalMilliseconds : 5400000
となり時間と分が加算されていることがわかります。
後はこれをDateTime型に変換しなおすなどすれば、Date型で計算しなおすことができるはずです。

あまり需要はないかもれませんね(´・ω・)