Tips

マイナスの時間

日付2007/09/05
ID07-017
バージョン2004
プラットフォームMac / Win

時刻の計算を時間型の変数やフィールドで行っている時、結果がマイナスになることがあります。マイナスの時間型変数やフィールドをそのまま取り出したり表示すると意外なところにマイナス記号がついて驚くかもしれません。例えば次のようなコードを実行してみますと、マイナスの時間をアラートで見ることができます。

C_TIME($t1;$t2;$t3)
$t1:=!!10:15:00!!
$t2:=!!11:00:00!!
$t3:=$t1-$t2
ALERT(String($t3))

上記のコードを実行すると、アラートには次のように表示されます。

00:-45:00

もし時や分の桁にも、ゼロ以外の数字があるときには、例えば次のようになります。

-10:-15:-30

これは4Dがマイナスの時間を表示するときの問題なので、計算においてはマイナスの時間として問題なく利用できます。つまり計算に用いるだけなら全く気にならないはずです。しかし表示において違和感があるような時には工夫が必要になります。例えば次のようなコードであれば、マイナスの時間のときには時刻に先立って▲が表示されます。

C_TIME($t1;$t2;$t3)
$t1:=!!10:15:00!!
$t2:=!!11:00:00!!
$t3:=$t1-$t2
If ($t3<0)
   ALERT("▲"+Replace string(String($t3);"-";""))
Else 
   ALERT(Time string($t3))
End if 

上記のコードを実行すると、アラートには次のように表示されます。

▲00:45:00

前述の例は、時間を文字として扱って操作していますが、倍長整数に入れて操作する方法など様々な方法が考えられますので、時間があるときにでも研究されてみてはいかがでしょうか。例えば下記のようなコードを思いつくかもしれません。

C_TIME($t1;$t2;$t3)
$t1:=!!10:15:00!!
$t2:=!!11:00:00!!
$t3:=$t1-$t2
ALERT("▲"*(0.5-(Int($t3)/(Abs($t3)*2)))+Time string(Abs($t3)))