TimeDuration.st
changeset 22990 4efa84e493a9
parent 22930 8a5a2399ea28
child 22997 1c2629bf2cac
--- a/TimeDuration.st	Tue May 22 17:06:12 2018 +0200
+++ b/TimeDuration.st	Tue May 22 17:06:27 2018 +0200
@@ -193,7 +193,8 @@
 
 microseconds:microseconds
     "return a new TimeDuration representing a duration of microseconds microseconds.
-     Currently we do not support this (we round to millis), but maybe later..."
+     Now we support microseconds (even picoseconds) but we still round to milliseconds for backward
+     compatibility with the historic interface."
 
     microseconds == 0 ifTrue:[^ TimeDurationZero].
     ^ self basicNew setMilliseconds:((microseconds / 1000) rounded).
@@ -203,6 +204,8 @@
      TimeDuration microseconds:2500 
      TimeDuration microseconds:12345678900 
     "
+
+    "Modified (comment): / 22-05-2018 / 16:54:17 / Stefan Vogel"
 !
 
 milliseconds:m
@@ -2062,11 +2065,11 @@
 
     micros isInteger ifTrue:[
         timeEncoding := micros // 1000.
-        additionalPicoseconds := (micros \\ 1000) * 1000 * 1000
+        additionalPicoseconds := (micros \\ 1000) * 1000000
     ] ifFalse:[
         timeEncoding := micros // 1000.
         restMicros := micros - (timeEncoding * 1000).
-        additionalPicoseconds := (restMicros * 1000 * 1000) rounded asInteger.
+        additionalPicoseconds := (restMicros * 1000000) truncated.
     ].
 
     "
@@ -2077,6 +2080,7 @@
     "
 
     "Modified: / 18-07-2007 / 13:44:16 / cg"
+    "Modified: / 22-05-2018 / 16:52:53 / Stefan Vogel"
 !
 
 setMilliseconds:millis
@@ -2087,10 +2091,11 @@
         timeEncoding := millis.
     ] ifFalse:[
         timeEncoding := millis // 1.
-        additionalPicoseconds := ((millis \\ 1) * 1000 * 1000 * 1000) rounded asInteger.
+        additionalPicoseconds := ((millis \\ 1) * 1000000000) truncated.
     ]
 
     "Modified: / 18-07-2007 / 13:44:16 / cg"
+    "Modified: / 22-05-2018 / 16:51:30 / Stefan Vogel"
 !
 
 setMilliseconds:millis additionalPicoseconds:picos
@@ -2106,18 +2111,19 @@
     ] ifFalse:[
         newMillis := millis truncated.
         rest := millis - newMillis.
-        newPicos := (rest * 1000 * 1000 * 1000) rounded asInteger.
+        newPicos := (rest * 1000000000) truncated.
     ].
 
-    picos ~~ 0 ifTrue:[
-        newPicos := newPicos + picos.
-        newMillis := newMillis + (newPicos // (1000*1000*1000)).
-        newPicos := newPicos \\ (1000*1000*1000).
+    picos ~= 0 ifTrue:[
+        newPicos := (newPicos + picos) truncated.
+        newMillis := newMillis + (newPicos // 1000000000).
+        newPicos := newPicos \\ 1000000000.
     ].
     timeEncoding := newMillis.
     additionalPicoseconds := newPicos.
 
     "Modified: / 18-07-2007 / 13:44:16 / cg"
+    "Modified: / 22-05-2018 / 16:55:53 / Stefan Vogel"
 !
 
 setNanoseconds:nanos
@@ -2132,8 +2138,8 @@
         additionalPicoseconds := restNanos * 1000 
     ] ifFalse:[
         timeEncoding := millis.
-        restNanos := nanos - (millis * (1000*1000)).
-        additionalPicoseconds := (restNanos * 1000) rounded asInteger.
+        restNanos := nanos - (millis * 1000000).
+        additionalPicoseconds := (restNanos * 1000) truncated.
     ].
 
     "
@@ -2146,13 +2152,14 @@
     "
 
     "Modified: / 18-07-2007 / 13:44:16 / cg"
+    "Modified (format): / 22-05-2018 / 16:53:09 / Stefan Vogel"
 !
 
 setPicoseconds:picos
     "set my duration given picoseconds."
 
-    timeEncoding := picos // (1000 * 1000 * 1000).
-    additionalPicoseconds := (picos \\ (1000 * 1000 * 1000)) rounded asInteger.
+    timeEncoding := picos // 1000000000.
+    additionalPicoseconds := (picos \\ 1000000000) truncated.
 
     "
      self new setMicroseconds:4
@@ -2173,6 +2180,7 @@
     "
 
     "Modified: / 18-07-2007 / 13:44:16 / cg"
+    "Modified: / 22-05-2018 / 16:51:45 / Stefan Vogel"
 !
 
 setSeconds:secs