--- 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 $'
! !