2014年1月3日金曜日

dynabook tab VT484で、時間計算コマンドを作る

このところ、プライペートでちょっと時間を計算する機会が増えてきたので、いつも持ち歩く「東芝dynabook tab VT484」で簡単に計算出来るようにコマンドを作ってみました。


Windows 8.1には、簡単にプログラムが作れる「Windows PowerShellというコマンドシェルが標準で付いていますので、こいつでコマンドを作ってみました。


どういうコマンドにしようかな・・・と少し考えたのですが、タブレットで入力する事を考えるとコマンド名は短い方が良いので・・・。

T 時間

だけにしました。

T 1:00って入力すると、1時間を意味します。

T 1:30だと、1時間半。

Tコマンドの結果は、全て「秒」になるようにします。

たとえば、T 1:00って入力すると3600という結果を返せば、(T 1:00) + (T 0:30)という計算が出来るようになるわけです。

後は、この秒を、時間:分:秒形式に戻すTFコマンドを作ってあげれば良いかなーと。


というわけで、TコマンドとTFコマンドは、以下のコードです。

私の場合は、Windows PowerShell起動時にINIT.PS1というプロファイルが読み込まれるようにしてありますので、その中に記述しています。

プロファイルの作成方法は、当ブログの過去の記事にも書かせて頂いておりました
#時間
FUNCTION GLOBAL:T($P_VALUE = "")
{
   $sVALUE = ""; #処理エリア
   #日:時:分:秒
   $oRX1 = $(NEW-OBJECT Regex("^\d+(\.\d+)?\:\d+(\.\d+)?\:\d+(\.\d+)?\:\d+$"));
   #時:分:秒
   $oRX2 = $(NEW-OBJECT Regex("^\d+(\.\d+)?\:\d+(\.\d+)?\:\d+$"));
   #時:分
   $oRX3 = $(NEW-OBJECT Regex("^\d+(\.\d+)?\:\d+(\.\d+)?$"));
   
   if($oRX1.IsMatch($P_VALUE))
   {
      $sVALUE = $P_VALUE;
   }
   elseif($oRX2.IsMatch($P_VALUE))
   {  #日要素の補正
      $sVALUE = "0:" + $P_VALUE;
   }
   elseif($oRX3.IsMatch($P_VALUE))
   {  #日と秒要素の補正
      $sVALUE = "0:" + $P_VALUE + ":0";
   }
   else
   {  #エラー
      WRITE-OUTPUT("パラメータは日:時:分:秒、時:分:秒、時:分のどれかでお願いします。");
      RETURN; #強制終了
   }
   $a = $sVALUE.Split(":");   
   $r = [TimeSpan]::FromDays($a[0]).TotalSeconds;
   $r+= [TimeSpan]::FromHours($a[1]).TotalSeconds;
   $r+= [TimeSpan]::FromMinutes($a[2]).TotalSeconds;
   $r+= $a[3];
   RETURN $r;  
}

#時間書式
FUNCTION GLOBAL:TF($P_VALUE = "")
{
   [String]$sVALUE = $P_VALUE;
   $oRX = $(NEW-OBJECT Regex("^\d+(\.\d+)?$"));
   if(!$oRX.IsMatch($sVALUE))
   {
      WRITE-OUTPUT "パラメータは秒数でお願いします。";
      RETURN; #強制終了
   }
   #時間オブジェクトの生成
   $oBASE = [TimeSpan]::FromSeconds($P_VALUE);

   $v1 = $($oBASE.Days * 24 + $oBase.Hours).ToString();
   $v2 = $($oBASE.Minutes).ToString("00");
   $v3 = $($oBASE.Seconds).ToString("00");
   if($oBASE.MilliSeconds -gt 0)
   {
      $v4 = "." + $($oBASE.Milliseconds).ToString();
   }
   else
   {
      $v4 = "";
   }
   
   RETURN $v1 + ":" + $v2 + ":" + $v3 + $v4;  
}
たとえば、8時間 + 30分を、20倍した結果を知りたい!!というような場合は

((T 8:00) + (T 0:30)) * 20

だと秒で612000って出ます。
秒じゃ分からん!!という時に、
TF (((T 8:00) + (T 0:30)) * 20)と、TFコマンドに渡してあげれば・・・

170:00:00
と170時間という表示になるように作りました。

あと、24:00以内であれば時計の代わりにもなります。

たとえば、19時49分から90分後を知りたいという時なんかは、 TF ((T 19:49) + (T 0:90))

とすれば、21:49:00という結果が返ります。

dynabook tab VT484のソフトキーボードは入力しやすいので、コマンド入力も意外といけたりします。

プログラム作るといっても、Windows PowerShellがあれば、何もインストールしたりすることなく、標準の状態でパパッと簡単に作れてしまうのが感涙ですねー。

いやー、本当にありがたい。