Time.st
changeset 6164 8335251d4cf9
parent 6163 78087543714b
child 6165 0ac589c3d92a
--- a/Time.st	Thu Nov 08 17:03:06 2001 +0100
+++ b/Time.st	Thu Nov 08 17:04:46 2001 +0100
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -13,10 +13,10 @@
 "{ Package: '__NoProject__' }"
 
 Time subclass:#TimeDuration
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Magnitude-General'
+        instanceVariableNames:''
+        classVariableNames:''
+        poolDictionaries:''
+        category:'Magnitude-General'
 !
 
 !TimeDuration class methodsFor:'documentation'!
@@ -24,7 +24,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -91,24 +91,333 @@
 formatString24
     "return the format string used to format european times (and other areas)"
 
-    ^ '%h:%m:%s.%i'
+    ^ '%h:%m:%s'
+! !
+
+!Time methodsFor:'Compatibility - Squeak'!
+
+intervalString
+    "Treat the time as a difference.  
+     Give it in hours and minutes with two digits of accuracy."
+
+    |hours minutes seconds hh mm ss |
+
+    hours := self hours.
+    minutes := self minutes.
+    seconds := self seconds.
+    hh := hours = 0   ifTrue: [''] ifFalse: [' ', hours printString, ' hours'].
+    mm := minutes = 0 ifTrue: [''] ifFalse: [' ', minutes printString, ' minutes'].
+    ss := seconds = 0 ifTrue: [''] ifFalse: [' ', seconds printString, ' seconds'].
+    hh size > 0 ifTrue: [ss := ''].
+    ^ hh, mm, ss
+
+    "
+     (Time fromSeconds:3600) intervalString
+     (Time fromSeconds:3605) intervalString
+     (Time fromSeconds:5) intervalString  
+     (Time fromSeconds:65) intervalString   
+    "
+!
+
+print24:prnt24Format showSeconds:doSeconds on:aStream
+    "print me either US or 24hr format, optionally with
+     seconds on a stream"
+
+    |format|
+
+    prnt24Format ifTrue:[
+        doSeconds ifTrue:[
+            format := '%h:%m:%s'
+        ] ifFalse:[
+            format := '%h:%m'
+        ].
+    ] ifFalse:[
+        "/ US format
+        doSeconds ifTrue:[
+            format := '%u:%m:%s %a'
+        ] ifFalse:[
+            format := '%u:%m %a'
+        ].
+    ].
+    ^ self
+        printOn:aStream 
+        format:format.
+
+    "
+     Time now print24:true showSeconds:true on:Transcript. Transcript cr.
+     Time now print24:false showSeconds:true on:Transcript. Transcript cr.
+     Time now print24:true showSeconds:false on:Transcript. Transcript cr.
+     Time now print24:false showSeconds:false on:Transcript. Transcript cr.
+    "
 ! !
 
-!TimeDuration methodsFor:'accessing'!
+!Time methodsFor:'accessing'!
+
+day
+    "catch day access - Time does not know about it"
+
+    ^ self shouldNotImplement
+!
+
+hours
+    "return the number of hours since midnight (i.e. 0..23)"
+
+    ^ self getSeconds // 3600
+
+    "
+     Time now hours
+    "
+!
 
 milliseconds
-    ^ timeEncoding \\ 1000
+    "time does not keep milliseconds 
+     - for compatibility with absoluteTime"
+
+    ^ 0
+!
+
+minutes
+    "return the number of minutes within the hour (i.e. 0..59)"
+
+    ^ (self getSeconds \\ 3600) // 60
+
+    "
+     Time now minutes
+    "
+!
+
+month 
+    "catch month access - Time does not know about it"
+
+    ^ self shouldNotImplement
+!
+
+seconds
+    "return the number of seconds within the minute (i.e. 0..59)"
+
+    ^ (self getSeconds \\ 3600) \\ 60
+
+    "
+     Time now seconds
+    "
+!
+
+year
+    "catch year access - Time does not know about it"
+
+    ^ self shouldNotImplement
 ! !
 
-!TimeDuration methodsFor:'converting'!
+!Time methodsFor:'comparing'!
+
+< aTime
+    "return true if the receiver is before the argument"
+
+    ^ timeEncoding < aTime timeEncoding
+!
+
+= aTime
+    "return true if the argument, aTime represents the same timeOfDay"
+
+    aTime class == self class ifTrue:[
+        ^ timeEncoding == aTime timeEncoding
+    ].
+    (aTime species == self species) ifFalse:[^ false].
+    ^ self asSeconds == aTime asSeconds
+!
+
+> aTime
+    "return true if the receiver is before the argument"
+
+    ^ timeEncoding > aTime timeEncoding
+!
+
+hash
+    "return an integer useful for hashing on times"
+
+    ^ timeEncoding
+! !
+
+!Time methodsFor:'converting'!
+
+asAbsoluteTime
+    "return an AbsoluteTime object from the receiver.
+     The date components are taken from today."
+
+    |today|
+
+    today := Date today.
+    ^ AbsoluteTime year:today year month:today month day:today day
+                   hour:(self hours) minute:(self minutes) second:(self seconds)
+                   millisecond:(self milliseconds)
+    "
+     Time now asAbsoluteTime
+    "
+
+    "Modified: / 13.7.1999 / 12:32:08 / stefan"
+!
+
+asSeconds
+    "return the number of seconds elapsed since midnight"
+
+    ^ self getSeconds
+
+    "
+     Time now asSeconds
+    "
+!
 
 asTime
     "return a Time object from the receiver - thats the receiver."
 
-    ^ Time hours:(self hours) minutes:(self minutes) seconds:(self seconds)
+    ^ self
 ! !
 
-!TimeDuration methodsFor:'private'!
+!Time methodsFor:'printing & storing'!
+
+print12HourFormatOn:aStream
+    "append a printed representation of the receiver to aStream.
+     Format is hh:mm:ss am/pm (i.e. 12-hour american format)."
+
+    ^ self
+        printOn:aStream 
+        format:(self class formatString12us)
+
+"/    |h m s ampm|
+"/
+"/    h := self hours.
+"/
+"/    "/ 0 -> 12 am
+"/    "/ 12 -> 12 pm
+"/
+"/    h // 12 == 0 ifTrue:[
+"/        ampm := ' am'.
+"/    ] ifFalse:[
+"/        ampm := ' pm'.
+"/    ].
+"/
+"/    h == 0 ifFalse:[
+"/        h := h - 1 \\ 12 + 1.
+"/    ].
+"/
+"/    h printOn:aStream.
+"/    aStream nextPut:$:.
+"/    m := self minutes.
+"/    (m < 10) ifTrue:[aStream nextPut:$0].
+"/    m printOn:aStream.
+"/    aStream nextPut:$:.
+"/    s := self seconds.
+"/    (s < 10) ifTrue:[aStream nextPut:$0].
+"/    s printOn:aStream.
+"/    aStream nextPutAll:ampm
+
+    "
+     Time now print12HourFormatOn:Transcript. Transcript cr
+     (Time now subtractHours:12) print12HourFormatOn:Transcript. Transcript cr
+     (Time hour:24 minutes:0 seconds:0) print12HourFormatOn:Transcript. Transcript cr
+     (Time hour:12 minutes:0 seconds:0) print12HourFormatOn:Transcript. Transcript cr
+     (Time hour:0 minutes:0 seconds:0) print12HourFormatOn:Transcript. Transcript cr
+     0 to:24 do:[:h |
+         (Time hour:h minutes:0 seconds:0) print12HourFormatOn:Transcript. Transcript cr
+     ]
+    "
+!
+
+print24HourFormatOn:aStream
+    "append a printed representation of the receiver to aStream.
+     Format is hh:mm:ss (i.e. 24-hour european format)."
+
+    ^ self
+        printOn:aStream 
+        format:(self class formatString24).
+
+"/    |h m s|
+"/
+"/    h := self hours.
+"/    (h < 10) ifTrue:[aStream nextPut:$0].
+"/    h printOn:aStream.
+"/    aStream nextPut:$:.
+"/    m := self minutes.
+"/    (m < 10) ifTrue:[aStream nextPut:$0].
+"/    m printOn:aStream.
+"/    aStream nextPut:$:.
+"/    s := self seconds.
+"/    (s < 10) ifTrue:[aStream nextPut:$0].
+"/    s printOn:aStream
+
+    "
+     Time now print24HourFormatOn:Transcript. Transcript cr
+    "
+!
+
+printOn:aStream
+    "append a user printed representation of the receiver to aStream.
+     The format is suitable for a human - not meant to be read back.
+
+     Format is hh:mm:ss either in 12-hour or 24-hour format.
+     depending on the setting of LanguageTerritory.
+     I dont know what ST-80 does here (12-hour format ?)"
+
+    LanguageTerritory == #us ifTrue:[
+        self print12HourFormatOn:aStream
+    ] ifFalse:[
+        self print24HourFormatOn:aStream
+    ]
+
+    "
+     Time now printOn:Transcript. Transcript cr
+    "
+
+    "Modified: 22.2.1996 / 16:58:30 / cg"
+!
+
+printString12HourFormat
+    "return a printed representation in 12 hour format"
+
+    ^ self printStringFormat:(self class formatString12us)               
+
+    "
+     Time now printString12HourFormat
+    "
+!
+
+printString24HourFormat
+    "return a printed representation in 24 hour format"
+
+    ^ self printStringFormat:(self class formatString24)               
+
+    "
+     Time now printString24HourFormat
+    "
+
+!
+
+shortPrintString
+    "dummy - for now"
+
+    ^ self printString
+
+    "Created: 20.6.1997 / 17:17:01 / cg"
+! !
+
+!Time methodsFor:'private'!
+
+fromOSTime:osTime
+    "set my time, given an osTime"
+
+    |h m s|
+
+    OperatingSystem computeTimePartsOf:osTime for:[
+        :hours :minutes :secs :millis |
+
+        h := hours.
+        m := minutes.
+        s := secs.
+    ].
+    self setHours:h minutes:m seconds:s
+
+    "Modified: 1.7.1996 / 15:21:06 / cg"
+!
 
 getMilliseconds
     "return the number of milliseconds since midnight"
@@ -143,5 +452,5 @@
 !TimeDuration class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Time.st,v 1.50 2001-11-08 16:03:06 md Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Time.st,v 1.51 2001-11-08 16:04:46 md Exp $'
 ! !