Timestamp.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 29 Oct 2012 22:07:56 +0000
branchjv
changeset 17976 50c2416f962a
parent 17911 a99f15c5efa5
child 18011 deb0c3355881
permissions -rw-r--r--
Merged with /trunk (CVS)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     1
"
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
     3
              All Rights Reserved
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     4
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    11
"
5376
c2ef7d5e25ca oops - was not able to reread my own storeString.
Claus Gittinger <cg@exept.de>
parents: 5292
diff changeset
    12
"{ Package: 'stx:libbasic' }"
c2ef7d5e25ca oops - was not able to reread my own storeString.
Claus Gittinger <cg@exept.de>
parents: 5292
diff changeset
    13
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    14
AbstractTime subclass:#Timestamp
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    15
	instanceVariableNames:'osTime'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    16
	classVariableNames:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    17
	poolDictionaries:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    18
	category:'Magnitude-Time'
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    19
!
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    20
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
    21
Object subclass:#TimestampBuilderAbstract
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    22
	instanceVariableNames:'year month day hour minute second millisecond isUtcTime'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    23
	classVariableNames:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    24
	poolDictionaries:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    25
	privateIn:Timestamp
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
    26
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
    27
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
    28
Timestamp::TimestampBuilderAbstract subclass:#TimestampISO8601Builder
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    29
	instanceVariableNames:'stream'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    30
	classVariableNames:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    31
	poolDictionaries:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
    32
	privateIn:Timestamp
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
    33
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
    34
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    35
!Timestamp class methodsFor:'documentation'!
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    36
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    37
copyright
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    38
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    39
 COPYRIGHT (c) 1989 by Claus Gittinger
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    40
              All Rights Reserved
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    41
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    42
 This software is furnished under a license and may be used
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    43
 only in accordance with the terms of that license and with the
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    44
 inclusion of the above copyright notice.   This software may not
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    45
 be provided or otherwise made available to, or used by, any
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    46
 other person.  No title to or ownership of the software is
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    47
 hereby transferred.
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    48
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    49
!
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    50
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    51
documentation
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    52
"
8264
b14c26a88e96 Change AbsoluteTime to Timestamp
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
    53
    This class represents time values in milliSeconds starting some
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    54
    time in the past. When printing an accessing values like #hour, the timestamp will be
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    55
    interpreted in the local timezone.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    56
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    57
    (The internal representation, osTime, will typically start with 1970-01-01 0:00, 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    58
     as used in the Unix operating system, but other systems may bias the time differently.
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
    59
     Actually, the implementation does not depend or even know which time/date 
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
    60
     the OperatingSystem bases its time upon - it is simply keeping the value(s)
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    61
     as returned from the OS.
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
    62
     For conversion, these values are given back to the OS, which will know
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    63
     how to convert these times. This has the advantage, that timestamps on files 
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    64
     (such as last-access-time or last-modification-time) can be handled transparently - 
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    65
     especially when performing comparisons).
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
    66
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
    67
    You should not interpret the osTime instance variable directly, instead
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    68
    (if at all), ask the OS to convert.
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    69
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    70
    The implementation of this class is not the same as in ST-80 
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    71
    (which represents the time as seconds from Jan 1., 1901).
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    72
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
    73
    This class should not be confused with Time (which only represents the
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    74
    time within one day). Time instances cannot be used to compare times across midnight; 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    75
    instances of Timestamp can.
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
    76
8264
b14c26a88e96 Change AbsoluteTime to Timestamp
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
    77
    Notice: this class was once called AbsoluteTime. Einstein told us in 1905, that talking
b14c26a88e96 Change AbsoluteTime to Timestamp
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
    78
    about a absolute time is not a good idea (at least in our universe). So the class
b14c26a88e96 Change AbsoluteTime to Timestamp
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
    79
    has been renamed to Timestamp which makes us more compatible to other ST dialects (e.g. VW)
b14c26a88e96 Change AbsoluteTime to Timestamp
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
    80
    AbsoluteTime is still kept as an alias for backward compatibility.
3479
9ca6229713f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3122
diff changeset
    81
1306
c0189edbd96c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1282
diff changeset
    82
    [author:]
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    83
        Claus Gittinger
1306
c0189edbd96c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1282
diff changeset
    84
1282
3f5eda57c516 commentary
Claus Gittinger <cg@exept.de>
parents: 1228
diff changeset
    85
    [See also:]
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
    86
        UtcTimestamp Time Date
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
    87
        Delay ProcessorScheduler
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    88
"
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    89
! !
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
    90
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    91
!Timestamp class methodsFor:'initialization'!
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    92
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    93
initialize
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    94
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
    95
    AbsoluteTime := self.       "backward compatibility"
17850
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
    96
    DateAndTime isNil ifTrue:[
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
    97
        DateAndTime := self
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
    98
    ].
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
    99
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   100
    "Modified: / 20-08-2011 / 18:43:51 / cg"
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   101
! !
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   102
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   103
!Timestamp class methodsFor:'instance creation'!
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
   104
4378
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   105
UTCYear:y month:m day:d hour:h minute:min second:s millisecond:millis
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   106
    "return an instance of the receiver, given individual components,
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   107
     interpreted in the UTC timezone."
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   108
423
claus
parents: 392
diff changeset
   109
    ^ self basicNew 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   110
        fromOSTime:(OperatingSystem 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   111
                        computeOSTimeFromUTCYear:y month:m day:d 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   112
                                         hour:h minute:min second:s
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   113
                                         millisecond:millis)
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
   114
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
   115
    "
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
   116
     Timestamp UTCYear:1970 month:1 day:1 hour:0 minute:0 second:0 millisecond:0
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   117
     Timestamp UTCYear:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:0
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   118
     Timestamp UTCYear:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   119
     Timestamp UTCYear:1999 month:7 day:1 hour:1 minute:0 second:0 millisecond:0
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   120
     Timestamp UTCYear:2000 month:1 day:1 hour:1 minute:0 second:0 millisecond:0
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   121
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   122
     UtcTimestamp UTCYear:2000 month:1 day:1 hour:1 minute:0 second:0 millisecond:0
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
   123
    "
1228
127d990e2f77 commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   124
4378
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   125
    "Modified: / 1.7.1996 / 15:22:07 / cg"
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   126
    "Created: / 13.7.1999 / 12:34:37 / stefan"
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   127
    "Modified: / 13.7.1999 / 12:42:30 / stefan"
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   128
!
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   129
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   130
decodeFromLiteralArray:anArray
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   131
    "decode an Timestamp literalArray.
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   132
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   133
     anArray may be:
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   134
        #(Timestamp '200004182000.123')
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   135
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   136
     or the deprecated old format, that is not portable between different architectures.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   137
     We parse this for backward compatibility (will be eventually removed).
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   138
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   139
        #(Timestamp #osTime: 12345678)     
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   140
    "
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   141
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   142
    (anArray at:2) == #osTime: ifTrue:[
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   143
        ^ self new osTime:(anArray at:3).
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   144
    ].
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   145
11126
146ee0b7806e onversion errors
Claus Gittinger <cg@exept.de>
parents: 11003
diff changeset
   146
    ^ self 
146ee0b7806e onversion errors
Claus Gittinger <cg@exept.de>
parents: 11003
diff changeset
   147
        readGeneralizedFrom:(anArray at:2) 
146ee0b7806e onversion errors
Claus Gittinger <cg@exept.de>
parents: 11003
diff changeset
   148
        onError:[ self conversionErrorSignal 
146ee0b7806e onversion errors
Claus Gittinger <cg@exept.de>
parents: 11003
diff changeset
   149
                    raiseErrorString:'literal array decoding' ]
8797
820ce611f762 comment
Claus Gittinger <cg@exept.de>
parents: 8479
diff changeset
   150
820ce611f762 comment
Claus Gittinger <cg@exept.de>
parents: 8479
diff changeset
   151
    "
820ce611f762 comment
Claus Gittinger <cg@exept.de>
parents: 8479
diff changeset
   152
     Timestamp
820ce611f762 comment
Claus Gittinger <cg@exept.de>
parents: 8479
diff changeset
   153
        decodeFromLiteralArray:#(Timestamp '20050323175226.014')      
820ce611f762 comment
Claus Gittinger <cg@exept.de>
parents: 8479
diff changeset
   154
    "
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   155
!
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
   156
423
claus
parents: 392
diff changeset
   157
fromDate:aDate andTime:aTime
claus
parents: 392
diff changeset
   158
    "return an instance of the receiver, initialized from a time and a date
1228
127d990e2f77 commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   159
     object.
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   160
     See also `Timestamp now' and other protocol inherited
1228
127d990e2f77 commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   161
     from my superclass."
423
claus
parents: 392
diff changeset
   162
claus
parents: 392
diff changeset
   163
    ^ self 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   164
        year:aDate year 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   165
        month:aDate month 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   166
        day:aDate day 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   167
        hour:aTime hours 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   168
        minute:aTime minutes 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   169
        second:aTime seconds 
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
   170
        millisecond:0
423
claus
parents: 392
diff changeset
   171
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   172
     Timestamp fromDate:(Date today) andTime:(Time now)  
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   173
     Timestamp fromDate:(Date today plusDays:1) andTime:(Time now) 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   174
     Timestamp now 
423
claus
parents: 392
diff changeset
   175
    "
claus
parents: 392
diff changeset
   176
4378
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   177
    "Modified: / 8.9.1995 / 15:07:30 / claus"
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   178
    "Modified: / 19.4.1996 / 15:25:46 / cg"
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   179
    "Modified: / 13.7.1999 / 12:30:47 / stefan"
423
claus
parents: 392
diff changeset
   180
!
claus
parents: 392
diff changeset
   181
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   182
newDay:dayInYear year:year
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   183
    "return a new Timestamp, given the year and the day-in-year (starting at 1).
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   184
     Date protocol compatibility"
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   185
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   186
    ^ (Date newDay:dayInYear year:year) asTimestamp
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   187
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   188
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   189
     Timestamp newDay:183 year:1996
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   190
    "
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   191
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   192
    "Modified: 2.7.1996 / 09:39:30 / cg"
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   193
!
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
   194
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   195
secondsSince1970:secs
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   196
    "set time from elapsed seconds since 1-1-1970, 0:0:0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   197
     This is the format used in the UNIX world"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   198
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   199
    ^ self basicNew setSeconds:secs.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   200
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   201
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   202
     Timestamp secondsSince1970:0      
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   203
     Timestamp secondsSince1970:3600
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   204
     Timestamp secondsSince1970:3600*24
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   205
     (Timestamp year:2010 month:7 day:1 hour:0 minute:0 second:0)
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   206
       =
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   207
     (Timestamp secondsSince1970:1277935200)
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   208
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   209
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   210
    "Created: / 21-10-1996 / 17:48:30 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   211
    "Modified: / 13-07-1999 / 12:31:22 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   212
    "Modified: / 08-01-2011 / 16:06:28 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   213
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   214
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   215
utcMillisecondsSince1970:secs
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   216
    "set time from elapsed milliseconds since 1-1-1970, 0:0:0."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   217
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   218
    ^ self basicNew setMilliseconds:secs
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   219
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   220
    "Created: / 08-01-2011 / 16:09:32 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   221
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   222
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   223
utcNow
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   224
    ^ UtcTimestamp now
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   225
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   226
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   227
        Timestamp now
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   228
        Timestamp utcNow
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   229
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   230
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   231
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   232
utcSecondsSince1970:secs
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   233
    "set time from elapsed seconds since 1-1-1970, 0:0:0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   234
     This is the format used in the UNIX world"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   235
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   236
    ^ self secondsSince1970:secs
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   237
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   238
"/    |divMod|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   239
"/
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   240
"/    divMod := secs divMod:3600.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   241
"/    ^ self year:1970 month:1 day:1 hour:(divMod at:1) minute:0 second:(divMod at:2) millisecond:0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   242
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   243
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   244
     Timestamp secondsSince1970:0      
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   245
     Timestamp secondsSince1970:3600    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   246
     Timestamp secondsSince1970:3600*24  
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   247
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   248
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   249
    "Modified: / 13-07-1999 / 12:31:22 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   250
    "Created: / 08-01-2011 / 16:05:09 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   251
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   252
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   253
year:y month:m day:d hour:h minute:min second:s
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   254
    "return an instance of the receiver, given individual components.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   255
     See also `Timestamp now' and other protocol inherited
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   256
     from my superclass."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   257
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   258
    ^ self year:y month:m day:d hour:h minute:min second:s millisecond:0
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   259
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   260
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   261
     Timestamp year:1970 month:1 day:1 hour:1 minute:0 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   262
     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   263
     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   264
     Timestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   265
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   266
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   267
    "Modified: / 1.7.1996 / 15:22:07 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   268
    "Created: / 13.7.1999 / 12:06:39 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   269
    "Modified: / 13.7.1999 / 12:27:47 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   270
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   271
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   272
year:y month:m day:d hour:h minute:min second:s millisecond:millis
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   273
    "return an instance of the receiver, given individual components.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   274
     See also `Timestamp now' and other protocol inherited
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   275
     from my superclass."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   276
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   277
    ^ self basicNew 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   278
            year:y month:m day:d hour:h minute:min second:s millisecond:millis
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   279
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   280
     Timestamp year:1970 month:1 day:1 hour:0 minute:0 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   281
     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   282
     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   283
     Timestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   284
     UtcTimestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   285
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   286
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   287
    "Modified: / 1.7.1996 / 15:22:07 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   288
    "Created: / 13.7.1999 / 12:28:44 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   289
    "Modified: / 13.7.1999 / 12:37:57 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   290
! !
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   291
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17862
diff changeset
   292
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   293
!Timestamp class methodsFor:'Compatibility-Squeak'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   294
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   295
current
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   296
    ^ self now
17850
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   297
!
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   298
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   299
fromString: aString
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   300
    "Answer a new instance for the value given by aString"
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   301
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   302
    ^ self readFrom: (ReadStream on: aString).
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   303
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   304
    "
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   305
     Timestamp fromString: '1-10-2000 11:55:00 am'. 
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   306
    "
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   307
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   308
    "Modified (format): / 20-08-2011 / 16:51:53 / cg"
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   309
!
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   310
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   311
readFrom:aStringOrStream
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   312
    "Answer a new instance for the value given by aStringOrStream"
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   313
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   314
    ^ self 
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   315
        readFrom:aStringOrStream 
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   316
        onError:[ ConversionError raiseRequestErrorString:'conversion error']
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   317
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   318
    "
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   319
     self readFrom:'23-jun-2000 15:00'
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   320
     self readFrom:'23-jun-2000 '
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   321
    "
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   322
8fa257692c35 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   323
    "Modified (comment): / 20-08-2011 / 16:52:10 / cg"
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   324
! !
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   325
17862
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   326
!Timestamp class methodsFor:'format strings'!
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   327
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   328
defaultFormatString
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   329
    ^ '%(year)-%(month)-%(day) %h:%m:%s.%i'
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   330
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   331
    "Created: / 16-01-2011 / 11:23:36 / cg"
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   332
! !
8a8ae3107950 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17850
diff changeset
   333
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   334
!Timestamp class methodsFor:'obsolete'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   335
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   336
day:d month:m year:y hour:h minutes:min seconds:s
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   337
    <resource: #obsolete>
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   338
    "This is obsolete. User #year:month:day:hour:minute:second:"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   339
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   340
    ^ self 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   341
        year:y month:m day:d hour:h 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   342
        minute:min second:s millisecond:0
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   343
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   344
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   345
    "Modified: / 1.7.1996 / 15:22:26 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   346
    "Modified: / 13.7.1999 / 12:29:56 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   347
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   348
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   349
day:d month:m year:y hour:h minutes:min seconds:s milliseconds:millis
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   350
    <resource: #obsolete>
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   351
    "This is obsolete. User #year:month:day:hour:minute:second:millisecond:"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   352
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   353
    ^ self year:y month:m day:d hour:h minute:min second:s millisecond:millis
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   354
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   355
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   356
     Timestamp day:1 month:1 year:1970 hour:1 minute:0 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   357
     Timestamp day:2 month:1 year:1991 hour:12 minute:30 second:0 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   358
     Timestamp day:2 month:1 year:1991 hour:12 minute:30 second:0 millisecond:100
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   359
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   360
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   361
    "Created: / 1.7.1996 / 14:46:09 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   362
    "Modified: / 1.7.1996 / 15:22:07 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   363
    "Modified: / 13.7.1999 / 12:30:26 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   364
! !
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   365
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   366
!Timestamp class methodsFor:'private'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   367
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   368
basicReadFrom:aStream
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   369
    "return a new Timestamp, reading a printed representation from aStream.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   370
     The string is interpreted as 24 hour format, as printed.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   371
     Notice, that this is not the storeString format and 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   372
     is different from the format expected by readFrom:.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   373
     KLUDGE: 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   374
        us and non-us format have different ordering of day and month;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   375
        The format read here is (non-us) dd-mm-yyyy hh:mm:ss.iii
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   376
        or (us-format, for Travis) mm/dd/yyyy hh:mm:ss.iii.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   377
     On error, raise an exception"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   378
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   379
    |firstNumber secondNumber day month year hour min sec millis usFormat possibeMonthName|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   380
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   381
    firstNumber := Integer readFrom:aStream onError:[TimeConversionError raiseErrorString:' - integer expected'].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   382
    firstNumber > 31 ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   383
        "/ assume iso8601 format;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   384
        ^ self readIso8601FormatFrom:aStream yearAlreadyRead:firstNumber.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   385
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   386
    aStream skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   387
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   388
    "/ consider this a kludge
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   389
    usFormat := (aStream peek == $/ ).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   390
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   391
    [aStream peek isLetterOrDigit] whileFalse:[aStream next].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   392
    aStream peek isDigit ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   393
        secondNumber := Integer readFrom:aStream onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   394
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   395
        usFormat ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   396
            month := firstNumber.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   397
            day := secondNumber.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   398
        ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   399
            month := secondNumber.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   400
            day := firstNumber.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   401
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   402
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   403
    ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   404
        possibeMonthName := aStream throughAnyForWhich:[:ch | ch isLetter].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   405
        month := Date indexOfMonth:possibeMonthName asLowercase.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   406
        day := firstNumber.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   407
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   408
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   409
    (day between:1 and:31) ifFalse:[ TimeConversionError raiseErrorString:' - bad day' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   410
    (month between:1 and:12) ifFalse:[ TimeConversionError raiseErrorString:' - bad month' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   411
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   412
    [aStream peek isDigit] whileFalse:[aStream next].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   413
    year := Integer readFrom:aStream onError:[ TimeConversionError raiseErrorString:' - bad year' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   414
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   415
    aStream atEnd ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   416
        hour := min := sec := millis := 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   417
    ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   418
        [aStream peek isDigit] whileFalse:[aStream next].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   419
        hour := Integer readFrom:aStream onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   420
        (hour between:0 and:24) ifFalse:[ TimeConversionError raiseErrorString:' - bad hour' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   421
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   422
        [aStream peek isDigit] whileFalse:[aStream next].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   423
        min := Integer readFrom:aStream onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   424
        (min between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad minute' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   425
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   426
        aStream atEnd ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   427
            sec := millis := 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   428
        ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   429
            [aStream peek isDigit] whileFalse:[aStream next].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   430
            sec := Integer readFrom:aStream onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   431
            (sec between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad second' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   432
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   433
            aStream peek = $. ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   434
                aStream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   435
                millis := Integer readFrom:aStream onError:0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   436
                millis >= 1000 ifTrue:[ TimeConversionError raiseErrorString:' - bad millisecond' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   437
            ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   438
                millis := 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   439
            ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   440
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   441
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   442
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   443
    "special check - only 24:00:00 is allowed;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   444
     every time after that must wrap"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   445
    hour == 24 ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   446
        (min ~~ 0 or:[sec ~~ 0 or:[millis ~~ 0]]) ifTrue:[ TimeConversionError raiseErrorString:' - bad hour' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   447
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   448
    ^ self year:year month:month day:day hour:hour minute:min second:sec millisecond:millis.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   449
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   450
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   451
     Timestamp basicReadFrom:'20-2-1995 13:11:06' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   452
     Timestamp basicReadFrom:'20-2-1995 13:11:06.' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   453
     (Timestamp basicReadFrom:'10-9-1995 13:11:06' readStream) month   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   454
     (Timestamp basicReadFrom:'10/9/1995 13:11:06' readStream) month   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   455
     Timestamp basicReadFrom:'20-2-1995 13:11' readStream       
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   456
     Timestamp basicReadFrom:'20-2-1995 13:11:06.100' readStream    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   457
     Timestamp basicReadFrom:'32-2-1995 13:11:06.100' readStream  
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   458
     Timestamp basicReadFrom:'32-foo-1995 13:11:06.100' readStream 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   459
     Timestamp basicReadFrom:'20-13-1995 13:11:06.100' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   460
     Timestamp basicReadFrom:'20-12-1995 25:11:06.100' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   461
     Timestamp basicReadFrom:'20-12-1995 23:61:06.100' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   462
     Timestamp basicReadFrom:'20-12-1995 23:10:66.100' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   463
     Timestamp basicReadFrom:'20-12-1995 23:10:00.1000' readStream   
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   464
     Timestamp basicReadFrom:'20-2-1995 24:01:00.100' readStream 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   465
     Timestamp basicReadFrom:'20-2-1995 24:00:01.100' readStream 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   466
     Timestamp basicReadFrom:'foo' readStream                    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   467
     Timestamp basicReadFrom:(Timestamp now printString readStream)                  
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   468
     Timestamp basicReadFrom:'1995-10-20 24:00:00.000' readStream 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   469
     Timestamp basicReadFrom:'1995-10-20 12:10:00.000' readStream 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   470
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   471
     UtcTimestamp basicReadFrom:'1995-10-20 12:10:00.000' readStream 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   472
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   473
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   474
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   475
readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   476
    "common helper for read methods.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   477
     Return a new Timestamp, reading an iso8601 representation from aStream.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   478
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   479
     If the time ends with a 'Z' it is the UTC (or zulu) time,
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   480
     othrwise it is local time.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   481
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   482
     Missing month/day values are replaced with 1; i.e. 1999T24:00
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   483
     is the same as 1999-01-01T24:00:00.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   484
     Missing minute, second and ms values are replaced with 0;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   485
     i.e. 1999T12 is the same as 1999-01-01T12:00:00.000.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   486
     Of course, a 24 hour clock is used.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   487
     On error, raise an exception.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   488
     Please use this format for all external representations - its the standard."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   489
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   490
    |str day month year hour min sec millis fraction isUtcTime peekChar|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   491
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   492
    str := aStringOrStream readStream.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   493
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   494
    month := day := 1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   495
    hour := min := sec := millis := 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   496
    isUtcTime := false.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   497
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   498
    yearOrNil notNil ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   499
        year := yearOrNil
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   500
    ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   501
        year := Integer readFrom:str onError:nil.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   502
        year isNil ifTrue:[ TimeConversionError raiseErrorString:' - bad year' ]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   503
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   504
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   505
    str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   506
    str peek == $- ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   507
        str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   508
        "/ month follows.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   509
        month := Integer readFrom:str.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   510
        (month between:1 and:12) ifFalse:[ TimeConversionError raiseErrorString:' - bad month' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   511
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   512
        str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   513
        str peek == $- ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   514
            str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   515
            "/ day follows.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   516
            day := Integer readFrom:str.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   517
            (day between:1 and:31) ifFalse:[ TimeConversionError raiseErrorString:' - bad day' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   518
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   519
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   520
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   521
    str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   522
    str atEnd ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   523
        "time follows"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   524
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   525
        str peek == $T ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   526
            "we treat the T as optional here"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   527
            str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   528
            str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   529
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   530
        hour := Integer readFrom:str onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   531
        (hour between:0 and:24) ifFalse:[ TimeConversionError raiseErrorString:' - bad hour' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   532
        str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   533
        str peekOrNil == $: ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   534
            str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   535
            "/ minutes follow.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   536
            min := Integer readFrom:str onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   537
            (min between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad minute' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   538
            str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   539
            str peekOrNil == $: ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   540
                str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   541
                "/ seconds follow.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   542
                sec := Integer readFrom:str onError:-1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   543
                (sec between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad seconds' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   544
                str skipSeparators.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   545
                str peekOrNil == $. ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   546
                    str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   547
                    "/ millis follow.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   548
                    fraction := Number readMantissaFrom:str radix:10.    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   549
                    millis := (1000 * fraction) rounded.  "/ mhmh - should it be truncated ?
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   550
                ]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   551
            ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   552
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   553
        
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   554
        peekChar := str peekOrNil.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   555
        peekChar notNil ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   556
            peekChar == $Z ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   557
                str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   558
                isUtcTime := true.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   559
            ]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   560
"/ Todo
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   561
"/            ifFalse:[peekChar == $+ ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   562
"/                str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   563
"/                isUtcTime := true.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   564
"/            ] ifFalse:[peekChar == $- ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   565
"/                str next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   566
"/                isUtcTime := true.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   567
"/            ]]]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   568
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   569
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   570
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   571
    "special check - only 24:00:00 is allowed;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   572
     every time after that must wrap"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   573
    hour == 24 ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   574
        (min ~~ 0 or:[sec ~~ 0 or:[millis ~~ 0]]) ifTrue:[ TimeConversionError raiseErrorString:' - bad hour' ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   575
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   576
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   577
    isUtcTime ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   578
        ^ self 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   579
            UTCYear:year month:month day:day 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   580
            hour:hour minute:min second:sec millisecond:millis.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   581
    ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   582
        ^ self 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   583
            year:year month:month day:day 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   584
            hour:hour minute:min second:sec millisecond:millis.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   585
    ]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   586
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   587
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   588
     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06.123'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   589
     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   590
     Timestamp readIso8601FormatFrom:'1995-02T13:11:06'     
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   591
     Timestamp readIso8601FormatFrom:'1995T13:11:06'        
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   592
     Timestamp readIso8601FormatFrom:'1995T13:11'           
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   593
     Timestamp readIso8601FormatFrom:'1995T13'              
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   594
     Timestamp readIso8601FormatFrom:'1995'              
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   595
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   596
     Timestamp readIso8601FormatFrom:'1995-02-20 13:11:06'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   597
     Timestamp readIso8601FormatFrom:'1995-02-20 13:11:06Z'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   598
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   599
     Timestamp readIso8601FormatFrom:'1995-02-20 13:11'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   600
     Timestamp readIso8601FormatFrom:'1995-02-20 13'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   601
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   602
   24 is allowed with ISO, and is 00:00 of the next day:
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   603
     Timestamp readIso8601FormatFrom:'1995-02-20 24:00:00'    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   604
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   605
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   606
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   607
readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil onError:exceptionValue
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   608
    "common helper for read methods."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   609
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   610
    |retVal|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   611
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   612
    ConversionError handle:[:ex |
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   613
        retVal := exceptionValue value
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   614
    ] do:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   615
        retVal := self readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   616
    ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   617
    ^ retVal
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   618
! !
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   619
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   620
!Timestamp class methodsFor:'reading'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   621
569
7134eb78cf48 readFrom:onError: can now also read from a string
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   622
readFrom:aStringOrStream onError:exceptionBlock
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   623
    "return a new Timestamp, reading a printed representation from aStream.
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   624
     The string is interpreted as 24 hour format, as printed.
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   625
     Notice, that this is not the storeString format and 
4898
a7a32af11523 oops - reading was wrong
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
   626
     is different from the format expected by readFrom:.
a7a32af11523 oops - reading was wrong
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
   627
     The format read here is dd-mm-yyyy hh:mm:ss.iii"
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   628
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   629
    |stream newTime|
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   630
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   631
    stream := aStringOrStream readStream.
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   632
7092
630807cd320f Convert Object>>errorSignal -> Error
Stefan Vogel <sv@exept.de>
parents: 7058
diff changeset
   633
    Error handle:[:ex |
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   634
        newTime := super readFrom:stream onError:exceptionBlock 
3995
777470826394 no need for another error-handler blcok in #readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 3510
diff changeset
   635
    ] do:[
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   636
        newTime := self basicReadFrom:stream.
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   637
    ].
3995
777470826394 no need for another error-handler blcok in #readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 3510
diff changeset
   638
    ^ newTime
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   639
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   640
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   641
     Timestamp readFrom:'20-2-1995 13:11:06'                            
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   642
     Timestamp readFrom:'20-2-1995 13:11'                               
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   643
     Timestamp readFrom:'20-2-2001 13:11'                               
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   644
     Timestamp readFrom:'20-2-1995 13:11:06.100'                        
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   645
     Timestamp readFrom:'32-2-1995 13:11:06.100' onError:'wrong'        
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   646
     Timestamp readFrom:'32-foo-1995 13:11:06.100' onError:'wrong'      
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   647
     Timestamp readFrom:'20-2-1995 24:01:00.100' onError:'wrong'        
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   648
     Timestamp readFrom:'20-2-1995 24:00:01.100' onError:'wrong'        
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   649
     Timestamp readFrom:'2002-08-02 24:00:01.100' onError:'wrong'        
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   650
     Timestamp readFrom:'foo' onError:'wrong'                           
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   651
     Timestamp readFrom:(Timestamp now storeString) onError:'wrong'                     
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
   652
    "
569
7134eb78cf48 readFrom:onError: can now also read from a string
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   653
4378
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   654
    "Modified: / 8.10.1996 / 19:25:59 / cg"
8b93493f8d56 New method to set UTC time.
Stefan Vogel <sv@exept.de>
parents: 3995
diff changeset
   655
    "Modified: / 13.7.1999 / 12:31:14 / stefan"
2311
88b035dd471a New Method: #secondsSince1970.
Stefan Vogel <sv@exept.de>
parents: 1701
diff changeset
   656
!
88b035dd471a New Method: #secondsSince1970.
Stefan Vogel <sv@exept.de>
parents: 1701
diff changeset
   657
9620
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   658
readGeneralizedFrom:aStringOrStream 
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   659
    "return a new Timestamp, reading a printed representation from aStream.
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   660
     The format read here is either
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   661
        yyyymmddHHMMSS.iii+uuuu, which is the ASN1 GeneralizedTime format.
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   662
     or:
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   663
        yyyy-mm-dd HH:MM:SS.iii +uuuu.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   664
     The string is interpreted as 24 hour format, as printed.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   665
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   666
     This format is used for BER specification of the ASN.1 GeneralizedTime as defined in X.208 Sec. 33,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   667
     so read this before changing anything here.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   668
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   669
     Notice, that this is not the storeString format and 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   670
     is different from the format expected by readFrom:.
9620
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   671
    "
11126
146ee0b7806e onversion errors
Claus Gittinger <cg@exept.de>
parents: 11003
diff changeset
   672
    ^ self 
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   673
        readGeneralizedFrom:aStringOrStream
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   674
        short:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   675
        onError:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   676
            self conversionErrorSignal raiseErrorString:'Timestamp format error' 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   677
        ].
9620
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   678
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   679
    "Created: / 22-08-2006 / 16:05:55 / cg"
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   680
!
85969e75395d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9619
diff changeset
   681
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   682
readGeneralizedFrom:aStringOrStream onError:exceptionBlock
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   683
    "return a new Timestamp, reading a printed representation from aStream.
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   684
     The format read here is either
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   685
        yyyymmddHHMMSS.iii+uuuu, which is the ASN1 GeneralizedTime format.
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   686
     or:
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   687
        yyyy-mm-dd HH:MM:SS.iii +uuuu.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   688
     The string is interpreted as 24 hour format, as printed.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   689
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   690
     This format is used for BER specification of the ASN.1 GeneralizedTime as defined in X.208 Sec. 33,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   691
     so read this before changing anything here.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   692
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   693
     Notice, that this is not the storeString format and 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   694
     is different from the format expected by readFrom:.
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   695
    "
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   696
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   697
    ^ self readGeneralizedFrom:aStringOrStream short:false onError:exceptionBlock
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   698
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   699
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   700
     |s|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   701
     s := '' writeStream.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   702
     Timestamp now printGeneralizedOn:s.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   703
     Timestamp readGeneralizedFrom:s contents onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   704
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   705
 Daylight saving time:
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   706
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   707
     Timestamp readGeneralizedFrom:'20000718120000Z' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   708
     Timestamp readGeneralizedFrom:'20000718120000+0200' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   709
     Timestamp readGeneralizedFrom:'20000718120000+0300' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   710
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   711
 No daylight saving time:
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   712
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   713
     Timestamp readGeneralizedFrom:'20000202120000Z' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   714
     Timestamp readGeneralizedFrom:'20000202120000+0100' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   715
     Timestamp readGeneralizedFrom:'20000202120000+0200' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   716
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   717
     Timestamp readGeneralizedFrom:'19950220131106' onError:[]   
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   718
     Timestamp readGeneralizedFrom:'199502201311' onError:[]    
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   719
     Timestamp readGeneralizedFrom:'19950220131106.100' onError:[]    
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   720
     Timestamp readGeneralizedFrom:'19950232131106.100' onError:'wrong'    
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   721
     Timestamp readGeneralizedFrom:'19950fo2131106.100' onError:'wrong'    
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   722
     Timestamp readGeneralizedFrom:'foo' onError:'wrong'                     
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   723
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   724
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00' onError:[]   
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   725
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00.100' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   726
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00.100 +0100' onError:[] 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   727
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00 -0100' onError:[]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   728
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00 +0000' onError:[] 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   729
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   730
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   731
    "Modified: / 13-07-1999 / 12:31:14 / stefan"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   732
    "Modified: / 22-08-2006 / 12:30:11 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   733
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   734
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   735
readGeneralizedFrom:aStringOrStream short:shortFormat onError:exceptionBlock
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   736
    "return a new Timestamp, reading a printed representation from aStream.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   737
     The long format read here is either
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   738
            yyyymmddHHMMSS.iii+uuuu, which is the ASN1 GeneralizedTime format.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   739
        or:
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   740
            yyyy-mm-dd HH:MM:SS.iii +uuuu.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   741
     The (not recommended) short forms are:
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   742
            yymmddHHMMSS.iii+uuuu, which is the ASN1 GeneralizedTime format.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   743
        or:
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   744
            yy-mm-dd HH:MM:SS.iii +uuuu.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   745
     The string is interpreted as 24 hour format, as printed.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   746
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   747
     This format is used for BER specification of the ASN.1 GeneralizedTime and
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   748
     UTCTime as defined in X.208 Sec. 33, so read this before changing anything here.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   749
     The short form is no longer recommended.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   750
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   751
     Notice, that this is not the storeString format and 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   752
     is different from the format expected by readFrom:.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   753
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   754
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   755
6624
886265eff14c #readFrom:onError: - avoid block creation
Stefan Vogel <sv@exept.de>
parents: 6047
diff changeset
   756
    ^ [
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   757
        |newTime str day month year hour min sec millis c|
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   758
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   759
        sec := millis := 0.
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   760
        str := aStringOrStream readStream.
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   761
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   762
        shortFormat ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   763
            year := Integer readFrom:(str next:2).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   764
            year < 50 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   765
                year := year + 2000.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   766
            ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   767
                year := year + 1900.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   768
            ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   769
        ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   770
            year := Integer readFrom:(str next:4).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   771
        ].
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   772
        str peek == $- ifTrue:[ str next].
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   773
        month := Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   774
        (month between:1 and:12) ifFalse:[^ exceptionBlock value].
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   775
        str peek == $- ifTrue:[ str next].
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   776
        day := Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   777
        (day between:1 and:31) ifFalse:[^ exceptionBlock value].
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   778
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   779
        str skipSeparators.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   780
        hour:= Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   781
        (hour between:0 and:24) ifFalse:[^ exceptionBlock value].
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   782
        str peek == $: ifTrue:[ str next].
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   783
        min:= Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   784
        (min between:0 and:59) ifFalse:[^ exceptionBlock value].
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   785
        str atEnd ifFalse:[
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   786
            str peek == $: ifTrue:[ str next].
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   787
            sec := Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   788
            (sec between:0 and:59) ifFalse:[^ exceptionBlock value].
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   789
            str atEnd ifFalse:[
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   790
                str peek == $. ifTrue:[
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   791
                    str next.
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   792
                    millis := Integer readFrom:str.
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   793
                ].
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   794
                str skipSeparators.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   795
            ].
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   796
        ].
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   797
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   798
        str atEnd ifTrue:[
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   799
            "/ this is local time
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   800
            newTime := self year:year month:month day:day 
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   801
                            hour:hour minute:min second:sec millisecond:millis.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   802
        ] ifFalse:[
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   803
            c := str next.
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   804
            c ~~ $Z ifTrue:[ 
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   805
                |tzh tzmin|
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   806
                tzh := Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   807
                tzmin := Integer readFrom:(str next:2).
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   808
                c == $+ ifTrue:[
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   809
                    "the timezone is ahead of UTC or EAST from Greenwich: subtract hours and minutes"
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   810
                    hour := hour - tzh.
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   811
                    min := min - tzmin.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   812
                ] ifFalse:[
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   813
                    c ~~ $- ifTrue:[
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   814
                        ^ exceptionBlock value.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   815
                    ].
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   816
                    "the timezone is behind of UTC or WEST from Greenwich: add hours and minutes"
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   817
                    hour := hour + tzh.
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   818
                    min := min + tzmin.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   819
                ].
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   820
            ].
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   821
            "this is UTC time"
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   822
            newTime := self UTCYear:year month:month day:day 
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   823
                              hour:hour minute:min second:sec millisecond:millis.
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   824
        ].
6624
886265eff14c #readFrom:onError: - avoid block creation
Stefan Vogel <sv@exept.de>
parents: 6047
diff changeset
   825
        newTime
886265eff14c #readFrom:onError: - avoid block creation
Stefan Vogel <sv@exept.de>
parents: 6047
diff changeset
   826
    ] on:Error do:exceptionBlock.
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   827
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   828
    "
5656
dbc52ea02716 Fix UTC Time w.r.t. Daylight saving time.
Stefan Vogel <sv@exept.de>
parents: 5572
diff changeset
   829
     |s|
dbc52ea02716 Fix UTC Time w.r.t. Daylight saving time.
Stefan Vogel <sv@exept.de>
parents: 5572
diff changeset
   830
     s := '' writeStream.
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   831
     Timestamp now printGeneralizedOn:s.
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   832
     Timestamp readGeneralizedFrom:s contents onError:[]
5656
dbc52ea02716 Fix UTC Time w.r.t. Daylight saving time.
Stefan Vogel <sv@exept.de>
parents: 5572
diff changeset
   833
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   834
     Timestamp readGeneralizedFrom:'20080718120000+0300' short:false onError:[] 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   835
     Timestamp readGeneralizedFrom:'080718120000+0300' short:true onError:[]    
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   836
     Timestamp readGeneralizedFrom:'990718120000+0300' short:true onError:[]    
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   837
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   838
 Daylight saving time:
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   839
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   840
     Timestamp readGeneralizedFrom:'20000718120000Z' onError:[]
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   841
     Timestamp readGeneralizedFrom:'20000718120000+0200' onError:[]
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   842
     Timestamp readGeneralizedFrom:'20000718120000+0300' onError:[]
5656
dbc52ea02716 Fix UTC Time w.r.t. Daylight saving time.
Stefan Vogel <sv@exept.de>
parents: 5572
diff changeset
   843
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   844
 No daylight saving time:
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   845
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   846
     Timestamp readGeneralizedFrom:'20000202120000Z' onError:[]
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   847
     Timestamp readGeneralizedFrom:'20000202120000+0100' onError:[]
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
   848
     Timestamp readGeneralizedFrom:'20000202120000+0200' onError:[]
5656
dbc52ea02716 Fix UTC Time w.r.t. Daylight saving time.
Stefan Vogel <sv@exept.de>
parents: 5572
diff changeset
   849
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   850
     Timestamp readGeneralizedFrom:'19950220131106' onError:[]   
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   851
     Timestamp readGeneralizedFrom:'199502201311' onError:[]    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   852
     Timestamp readGeneralizedFrom:'19950220131106.100' onError:[]    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   853
     Timestamp readGeneralizedFrom:'19950232131106.100' onError:'wrong'    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   854
     Timestamp readGeneralizedFrom:'19950fo2131106.100' onError:'wrong'    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   855
     Timestamp readGeneralizedFrom:'foo' onError:'wrong'                     
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   856
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   857
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00' onError:[]   
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   858
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00.100' onError:[]
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   859
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00.100 +0100' onError:[] 
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   860
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00 -0100' onError:[]
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   861
     Timestamp readGeneralizedFrom:'2000-02-02 12:00:00 +0000' onError:[] 
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   862
    "
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   863
9619
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   864
    "Modified: / 13-07-1999 / 12:31:14 / stefan"
6f1fc553757f skip dashes and colons in readGeneralizedFrom
Claus Gittinger <cg@exept.de>
parents: 9449
diff changeset
   865
    "Modified: / 22-08-2006 / 12:30:11 / cg"
5292
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   866
!
a3936f79327b Fix #readGeneralizedFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 5291
diff changeset
   867
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   868
readISO8601From: stringOrStream
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   869
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   870
    ^ TimestampISO8601Builder read:stringOrStream withClass:self
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   871
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   872
    "Created: / 16-06-2005 / 16:13:36 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   873
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   874
6684
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   875
readIso8601FormatFrom:aStringOrStream
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   876
    "return a new Timestamp, reading an iso8601 UTC representation from aStream.
6684
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   877
     Missing month/day values are replaced with 1; i.e. 1999T24:00
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   878
     is the same as 1999-01-01T24:00:00.
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   879
     Missing minute, second and ms values are replaced with 0;
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   880
     i.e. 1999T12 is the same as 1999-01-01T12:00:00.000.
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   881
     Of course, a 24 hour clock is used.
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   882
     On error, raise an exception.
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   883
     Please use this format for all external representations - its the standard."
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   884
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   885
    ^ self
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   886
        readIso8601FormatFrom:aStringOrStream yearAlreadyRead:nil
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   887
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   888
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   889
     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06'    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   890
     Timestamp readIso8601FormatFrom:'1995-02T13:11:06'     
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   891
     Timestamp readIso8601FormatFrom:'1995T13:11:06'        
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   892
     Timestamp readIso8601FormatFrom:'1995T13:11'           
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   893
     Timestamp readIso8601FormatFrom:'1995T13'              
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   894
     Timestamp readIso8601FormatFrom:'1995'              
6684
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   895
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   896
     Timestamp readIso8601FormatFrom:'1995-02-20 13:11:06'    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   897
     Timestamp readIso8601FormatFrom:'1995-02-20 13:11'    
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   898
     Timestamp readIso8601FormatFrom:'1995-02-20 13'    
6684
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   899
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   900
   24 is allowed with ISO, and is 00:00 of the next day:
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
   901
     Timestamp readIso8601FormatFrom:'1995-02-20 24:00:00'    
6684
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   902
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   903
    "
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   904
!
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
   905
8432
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   906
readIso8601FormatFrom:aStringOrStream onError:exceptionValue
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   907
    "return a new Timestamp, reading an iso8601 UTC representation from aStream.
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   908
     Missing month/day values are replaced with 1; i.e. 1999T24:00
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   909
     is the same as 1999-01-01T24:00:00.
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   910
     Missing minute, second and ms values are replaced with 0;
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   911
     i.e. 1999T12 is the same as 1999-01-01T12:00:00.000.
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   912
     Of course, a 24 hour clock is used.
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   913
     On error, raise an exception.
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   914
     Please use this format for all external representations - its the standard."
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   915
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   916
    ^ self
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   917
        readIso8601FormatFrom:aStringOrStream 
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   918
        yearAlreadyRead:nil 
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   919
        onError:exceptionValue
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   920
!
c6919af01ed6 + readFrom:onError:
Claus Gittinger <cg@exept.de>
parents: 8414
diff changeset
   921
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   922
readRFC1123FormatFrom:rfc1123String onError:exceptionBlock
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   923
    |parts indexModifier utcOffsetString utcOffset day year time monthName month|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   924
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   925
"/    All HTTP/1.0 date/time stamps must be represented in Universal Time (UT), 
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   926
"/    also known as Greenwich Mean Time (GMT), without exception. 
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   927
"/    This is indicated in the first two formats by the inclusion of "GMT" as the three-letter abbreviation for time zone, 
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   928
"/    and should be assumed when reading the asctime format.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   929
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   930
"/    HTTP-date      = rfc1123-date | rfc850-date | asctime-date
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   931
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   932
"/    rfc1123-date   = wkday "," SP date1 SP time SP "GMT"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   933
"/    rfc850-date    = weekday "," SP date2 SP time SP "GMT"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   934
"/    asctime-date   = wkday SP date3 SP time SP 4DIGIT
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   935
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   936
"/    date1          = 2DIGIT SP month SP 4DIGIT
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   937
"/                     ; day month year (e.g., 02 Jun 1982)
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   938
"/    date2          = 2DIGIT "-" month "-" 2DIGIT
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   939
"/                     ; day-month-year (e.g., 02-Jun-82)
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   940
"/    date3          = month SP ( 2DIGIT | ( SP 1DIGIT ))
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   941
"/                     ; month day (e.g., Jun  2)
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   942
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   943
"/    time           = 2DIGIT ":" 2DIGIT ":" 2DIGIT
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   944
"/                     ; 00:00:00 - 23:59:59
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   945
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   946
"/    wkday          = "Mon" | "Tue" | "Wed"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   947
"/                   | "Thu" | "Fri" | "Sat" | "Sun"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   948
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   949
"/    weekday        = "Monday" | "Tuesday" | "Wednesday"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   950
"/                   | "Thursday" | "Friday" | "Saturday" | "Sunday"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   951
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   952
"/    month          = "Jan" | "Feb" | "Mar" | "Apr"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   953
"/                   | "May" | "Jun" | "Jul" | "Aug"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   954
"/                   | "Sep" | "Oct" | "Nov" | "Dec"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   955
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   956
"/    Mon, 17 Aug 2009 11:11:15 GMT
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   957
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   958
    rfc1123String isEmptyOrNil ifTrue:[^ exceptionBlock value].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   959
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   960
    parts := rfc1123String subStrings:Character space.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   961
    parts size == 6 ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   962
        indexModifier := 0.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   963
    ] ifFalse:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   964
        parts size == 5 ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   965
            indexModifier := -1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   966
        ] ifFalse:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   967
            ^ exceptionBlock value
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   968
        ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   969
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   970
17807
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
   971
    utcOffset := 0.
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   972
    utcOffsetString := (parts at:6 + indexModifier).
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   973
    ((utcOffsetString sameAs:'GMT') or:[utcOffsetString sameAs:'UTC']) ifFalse:[ 
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   974
        self assert:utcOffsetString size == 5.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   975
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   976
        utcOffset := (utcOffsetString from:4 to:5) asString asNumber * 60.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   977
        utcOffset := utcOffset + ((utcOffsetString from:2 to:3) asString asNumber * 60 * 60).
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   978
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   979
        (utcOffsetString at:1) asSymbol == #- ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   980
            utcOffset := -1 * utcOffset.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   981
        ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   982
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   983
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   984
    day := Integer readFrom:(parts at:2 + indexModifier) onError:[^ exceptionBlock].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   985
    year := Integer readFrom:(parts at:4 + indexModifier) onError:[^ exceptionBlock].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   986
    time := Time readFrom:(parts at:5 + indexModifier) onError:[^ exceptionBlock].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   987
    monthName := parts at:3 + indexModifier.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   988
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   989
    month := (1 to:12) asOrderedCollection detect:[:i | 
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   990
        (Date abbreviatedNameOfMonth:i language:#en) sameAs:monthName 
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   991
    ] ifNone:[^ exceptionBlock].    
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   992
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   993
    ^ (self 
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   994
        fromDate:(Date newDay:day monthIndex:month year:year) 
17807
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
   995
        andTime:time) + utcOffset
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
   996
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
   997
    "Modified: / 05-10-2010 / 16:05:32 / cg"
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   998
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   999
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1000
!Timestamp methodsFor:'accessing'!
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1001
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1002
day
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1003
    "return the day-in-month of the receiver (1..31).
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1004
     For compatibility, use instances of Date for this."
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1005
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1006
    ^ self timeInfo day.
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 30
diff changeset
  1007
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1008
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1009
     Timestamp now day 
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1010
    "
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1011
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1012
    "Modified: 1.7.1996 / 15:23:02 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1013
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1014
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1015
dayInWeek
7327
ab17eb5f11a6 printFormat
Claus Gittinger <cg@exept.de>
parents: 7111
diff changeset
  1016
    "return the week-day of the receiver - 1 for monday, 7 for sunday
ab17eb5f11a6 printFormat
Claus Gittinger <cg@exept.de>
parents: 7111
diff changeset
  1017
     WARNING: different from ANSIs dayOfWeek (which returns 1 for sunday, ... 7 for saturday).  
ab17eb5f11a6 printFormat
Claus Gittinger <cg@exept.de>
parents: 7111
diff changeset
  1018
     WARNING: does not care for pre-julian dates 
ab17eb5f11a6 printFormat
Claus Gittinger <cg@exept.de>
parents: 7111
diff changeset
  1019
        (i.e. do not use this for dates before 1752)"
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1020
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1021
    ^ self timeInfo dayInWeek
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1022
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1023
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1024
     Timestamp now dayInWeek 
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1025
    "
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1026
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1027
    "Modified: 2.7.1996 / 09:20:32 / cg"
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1028
    "Created: 2.7.1996 / 09:35:48 / cg"
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1029
!
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1030
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1031
dayInYear
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1032
    "return the year-day of the receiver - 1 for Jan, 1st."
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1033
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1034
    ^ self timeInfo dayInYear
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1035
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1036
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1037
     Timestamp now dayInYear 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1038
     Timestamp newDay:184 year:1996  
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1039
    "
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1040
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1041
    "Modified: 2.7.1996 / 10:21:02 / cg"
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1042
!
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1043
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1044
dayOfMonth
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1045
    "Answer the day of the month represented by me.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1046
     Same as day; for ST-80 compatibility."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1047
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1048
    ^ self asDate dayOfMonth
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1049
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1050
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1051
     Timestamp now dayOfMonth 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1052
     (Timestamp newDay:184 year:1996) dayOfMonth  
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1053
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1054
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1055
    "Created: / 20-01-2011 / 12:26:54 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1056
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1057
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1058
dayOfWeekName
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1059
    "return the week-day of the receiver as a string.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1060
     The returned string depends on the language setting.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1061
     Expect things like 'monday', 'tuesday' ..."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1062
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1063
    ^ self asDate dayOfWeekName
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1064
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1065
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1066
     Timestamp now dayOfWeekName 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1067
     (Timestamp newDay:184 year:1996) dayOfWeekName  
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1068
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1069
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1070
    "Created: / 20-01-2011 / 12:28:46 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1071
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1072
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1073
hour
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1074
    "return the hour (0..23).
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1075
     ST-80 Timestamp compatibility (I'd prefer the name #hours, for Time compatibility)."
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1076
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1077
    ^ self hours
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1078
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1079
    "Created: 1.7.1996 / 15:14:50 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1080
    "Modified: 1.7.1996 / 15:15:32 / cg"
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1081
!
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1082
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1083
hours
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1084
    "return the hours (0..23)"
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1085
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1086
    ^ self timeInfo hours
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 30
diff changeset
  1087
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1088
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1089
     Timestamp now hours  
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1090
    "
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1091
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1092
    "Modified: 2.7.1996 / 09:20:32 / cg"
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1093
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1094
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1095
millisecond
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1096
    "return the millisecond (0..999).
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1097
     ST-80 Timestamp compatibility (I'd prefer the name #milliseconds)."
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1098
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1099
    ^ self milliseconds
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1100
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1101
    "Created: 1.7.1996 / 15:14:50 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1102
    "Modified: 1.7.1996 / 15:15:24 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1103
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1104
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1105
milliseconds
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1106
    "return the milliseconds (0..999)"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1107
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1108
    ^ self timeInfo milliseconds
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1109
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1110
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1111
     Timestamp now milliseconds   
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1112
    "
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1113
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1114
    "Created: 1.7.1996 / 15:15:02 / cg"
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1115
    "Modified: 2.7.1996 / 09:21:41 / cg"
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1116
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1117
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1118
minute
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1119
    "return the minute (0..59).
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1120
     ST-80 Timestamp compatibility (I'd prefer the name #minutes, for Time compatibility)."
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1121
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1122
    ^ self minutes
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1123
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1124
    "Created: 1.7.1996 / 15:14:29 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1125
    "Modified: 1.7.1996 / 15:15:37 / cg"
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1126
!
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1127
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1128
minutes
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1129
    "return the minutes (0..59)"
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1130
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1131
    ^ self timeInfo minutes
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1132
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1133
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1134
     Timestamp now minutes 
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1135
    "
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1136
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1137
    "Modified: 2.7.1996 / 09:20:49 / cg"
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1138
!
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1139
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1140
month
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1141
    "return the month of the receiver (1..12).
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1142
     For compatibility, use instances of Date for this."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1143
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1144
    ^ self timeInfo month
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1145
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1146
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1147
     Timestamp now month
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1148
    "
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1149
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1150
    "Modified: 1.7.1996 / 15:23:05 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1151
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1152
8286
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1153
osTime
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1154
    "get the internal representation of the time.
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1155
     Warning: do not depend on the value (unix vs. win32 - differences)"
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1156
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1157
    ^ osTime
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1158
!
d4c7d4d34b8b osTime getter
werner
parents: 8271
diff changeset
  1159
4807
Claus Gittinger <cg@exept.de>
parents: 4679
diff changeset
  1160
osTime:aTime
5726
be29c70156c1 comments added
Claus Gittinger <cg@exept.de>
parents: 5719
diff changeset
  1161
    "set the internal representation of the time"
be29c70156c1 comments added
Claus Gittinger <cg@exept.de>
parents: 5719
diff changeset
  1162
4807
Claus Gittinger <cg@exept.de>
parents: 4679
diff changeset
  1163
    osTime := aTime.
Claus Gittinger <cg@exept.de>
parents: 4679
diff changeset
  1164
!
Claus Gittinger <cg@exept.de>
parents: 4679
diff changeset
  1165
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1166
second
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1167
    "return the second (0..59).
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1168
     ST-80 Timestamp compatibility (I'd prefer the name #seconds, for Time compatibility)."
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1169
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1170
    ^ self seconds
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1171
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1172
    "Created: 1.7.1996 / 15:14:19 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1173
    "Modified: 1.7.1996 / 15:15:49 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1174
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1175
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1176
seconds
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1177
    "return the seconds (0..59)"
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1178
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1179
    ^ self timeInfo seconds
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1180
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1181
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1182
     Timestamp now seconds 
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1183
    "
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1184
1513
a4b4c4ce039c added dayInYear & dayInWeek for Date compatibility
Claus Gittinger <cg@exept.de>
parents: 1501
diff changeset
  1185
    "Modified: 2.7.1996 / 09:20:54 / cg"
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1186
!
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1187
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1188
timeInfo
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1189
    ^ OperatingSystem computeTimeAndDateFrom:osTime
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1190
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1191
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1192
timeZoneDeltaInMinutes
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1193
    "answer the number of minutes between local time and utc time.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1194
     Delta is positive if local time is ahead of utc, negative if behind utc."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1195
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1196
    ^ self utcOffset negated // 60
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1197
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1198
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1199
     Timestamp now timeZoneDeltaInMinutes 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1200
     (Timestamp day:1 month:7 year:1995 hour:12 minutes:0 seconds:0) timeZoneDeltaInMinutes
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1201
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1202
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1203
    "Modified: 20.12.1995 / 17:28:49 / stefan"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1204
    "Modified: 1.7.1996 / 15:21:29 / cg"
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1205
!
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1206
799
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1207
utcOffset
8886
89cb1f2de1c7 Comment for #utcOffset
Stefan Vogel <sv@exept.de>
parents: 8822
diff changeset
  1208
    "return the difference between UTC (Greenwich Mean Time) and the local time in seconds.
89cb1f2de1c7 Comment for #utcOffset
Stefan Vogel <sv@exept.de>
parents: 8822
diff changeset
  1209
     If daylight saving time applies to ourself, take that into account.
8888
4171ed260947 Fix #utcSecondsSince1970 and #utcSecondsSince1901 (wrong direction of utcOffset)
Stefan Vogel <sv@exept.de>
parents: 8886
diff changeset
  1210
8886
89cb1f2de1c7 Comment for #utcOffset
Stefan Vogel <sv@exept.de>
parents: 8822
diff changeset
  1211
     Add utcOffset to convert from local time to UTC time.
8888
4171ed260947 Fix #utcSecondsSince1970 and #utcSecondsSince1901 (wrong direction of utcOffset)
Stefan Vogel <sv@exept.de>
parents: 8886
diff changeset
  1212
     Subtract utcOffset to convert from UTC time to local time.
8886
89cb1f2de1c7 Comment for #utcOffset
Stefan Vogel <sv@exept.de>
parents: 8822
diff changeset
  1213
89cb1f2de1c7 Comment for #utcOffset
Stefan Vogel <sv@exept.de>
parents: 8822
diff changeset
  1214
     If utcOffset is negative, the local timezone is east of Greenwich.
89cb1f2de1c7 Comment for #utcOffset
Stefan Vogel <sv@exept.de>
parents: 8822
diff changeset
  1215
     If utcOffset is positive, the local timezone is west of Greenwich."
799
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1216
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1217
    ^ self timeInfo utcOffset
799
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1218
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1219
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1220
     Timestamp now utcOffset 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1221
     (Timestamp day:1 month:7 year:1995 hour:12 minutes:0 seconds:0) utcOffset
799
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1222
    "
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1223
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1224
    "Modified: 20.12.1995 / 17:28:49 / stefan"
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1225
    "Modified: 1.7.1996 / 15:21:29 / cg"
799
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1226
!
33cf42458eee New Method utcOffset
Stefan Vogel <sv@exept.de>
parents: 795
diff changeset
  1227
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1228
weekInYear
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1229
    "return the week number of the receiver - 1 for Jan, 1st."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1230
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1231
    ^ Date weekInYearOf:self
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1232
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1233
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1234
     (Timestamp newDay:1 year:2000) weekInYear    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1235
     (Timestamp newDay:2 year:2000) weekInYear    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1236
     (Timestamp newDay:3 year:2000) weekInYear    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1237
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1238
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1239
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1240
year
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1241
    "return the year of the receiver i.e. 1992.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1242
     For compatibility, use instances of Date for this."
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1243
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1244
    ^ self timeInfo year
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1245
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1246
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1247
     Timestamp now year
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1248
    "
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1249
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1250
    "Modified: 1.7.1996 / 15:23:08 / cg"
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1251
! !
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1252
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1253
!Timestamp methodsFor:'arithmetic'!
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1254
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1255
ceilingSecond
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1256
    "return a timestamp which represents the next full second"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1257
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1258
    |offs|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1259
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1260
    offs := (self milliseconds / 1000) ceiling.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1261
    ^ self class basicNew setSeconds:(self getSeconds + offs).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1262
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1263
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1264
     |t1 t2|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1265
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1266
     t1 := Timestamp now.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1267
     t2 := t1 ceilingSecond.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1268
     self halt
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1269
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1270
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1271
    "Created: / 08-01-2011 / 16:23:03 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1272
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1273
10736
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1274
deltaFrom:aTimestamp
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1275
    "return the delta as a timeDuration between 2 timeStamps.
17780
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1276
     The argument is supposed to be BEFORE the receiver,
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1277
        computes self - aTimestamp"
10736
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1278
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1279
    ^ TimeDuration fromMilliseconds:(self getMilliseconds - (aTimestamp getMilliseconds))
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1280
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1281
    "
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1282
     |t1 t2|
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1283
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1284
     t1 := Timestamp now.
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1285
     Delay waitForSeconds:0.5.
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1286
     t2 := Timestamp now.
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1287
     t2 deltaFrom:t1   
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1288
    "
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1289
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1290
    "Created: / 04-10-2007 / 13:34:28 / cg"
17780
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1291
    "Modified: / 10-07-2010 / 09:37:01 / cg"
10736
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1292
!
ea9e95d7f9f2 + deltaFrom:
Claus Gittinger <cg@exept.de>
parents: 9620
diff changeset
  1293
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1294
floorSecond
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1295
    "return a timestamp truncated to the last full second"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1296
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1297
    ^ self class basicNew setSeconds:(self getSeconds).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1298
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1299
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1300
     |t1 t2|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1301
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1302
     t1 := Timestamp now.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1303
     t2 := t1 floorSecond.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1304
     self halt
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1305
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1306
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1307
    "Created: / 08-01-2011 / 16:20:55 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1308
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1309
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1310
millisecondDeltaFrom:aTimestamp
3510
75824285fe74 comment
Claus Gittinger <cg@exept.de>
parents: 3479
diff changeset
  1311
    "return the delta in milliseconds between 2 absolute times.
17780
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1312
     The argument is supposed to be BEFORE the receiver,
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1313
        computes self - aTimestamp"
2623
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1314
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1315
    ^ self getMilliseconds - (aTimestamp getMilliseconds)
2623
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1316
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1317
    "
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1318
     |t1 t2|
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1319
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1320
     t1 := Timestamp now.
2623
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1321
     Delay waitForSeconds:0.5.
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1322
     t2 := Timestamp now.
2623
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1323
     t2 millisecondDeltaFrom:t1   
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1324
    "
593ab389efd1 added #millisecondDeltaFrom:
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  1325
17780
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1326
    "Modified: / 10-07-2010 / 09:37:18 / cg"
9056
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1327
!
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1328
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1329
roundedToSecond
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1330
    "return a timestamp which represents the time rounded to the nearest full second"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1331
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1332
    |offs|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1333
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1334
    offs := (self milliseconds / 1000) rounded.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1335
    ^ self class basicNew setSeconds:(self getSeconds + offs).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1336
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1337
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1338
     |t1 t2|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1339
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1340
     t1 := Timestamp now.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1341
     t2 := t1 roundedToSecond.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1342
     self halt
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1343
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1344
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1345
    "Created: / 08-01-2011 / 16:24:12 / cg"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1346
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1347
9056
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1348
secondDeltaFrom:aTimestamp
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1349
    "return the delta in seconds between 2 absolute times.
17780
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1350
     The argument is supposed to be BEFORE the receiver,
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1351
        computes self - aTimestamp"
9056
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1352
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1353
    ^ self getSeconds - (aTimestamp getSeconds)
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1354
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1355
    "
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1356
     |t1 t2|
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1357
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1358
     t1 := Timestamp now.
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1359
     Delay waitForSeconds:5.
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1360
     t2 := Timestamp now.
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1361
     t2 secondDeltaFrom:t1   
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1362
    "
d284a6514312 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8888
diff changeset
  1363
17780
b6e42c92eba0 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17772
diff changeset
  1364
    "Modified: / 10-07-2010 / 09:37:24 / cg"
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1365
! !
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1366
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1367
!Timestamp methodsFor:'comparing'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1368
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1369
= aTime
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1370
    "return true if the argument, aTime represents the same time"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1371
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1372
    aTime isTimestamp ifFalse:[^ false].
1520
da08f8e49e87 fixed comparing absoluteTimes
Claus Gittinger <cg@exept.de>
parents: 1513
diff changeset
  1373
    ^ (self getMilliseconds = aTime getMilliseconds)
da08f8e49e87 fixed comparing absoluteTimes
Claus Gittinger <cg@exept.de>
parents: 1513
diff changeset
  1374
da08f8e49e87 fixed comparing absoluteTimes
Claus Gittinger <cg@exept.de>
parents: 1513
diff changeset
  1375
    "Modified: 3.7.1996 / 13:10:24 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1376
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1377
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1378
hash
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1379
    "return an integer useful for hashing on times"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1380
1520
da08f8e49e87 fixed comparing absoluteTimes
Claus Gittinger <cg@exept.de>
parents: 1513
diff changeset
  1381
    ^ osTime // 1000
da08f8e49e87 fixed comparing absoluteTimes
Claus Gittinger <cg@exept.de>
parents: 1513
diff changeset
  1382
da08f8e49e87 fixed comparing absoluteTimes
Claus Gittinger <cg@exept.de>
parents: 1513
diff changeset
  1383
    "Modified: 3.7.1996 / 13:10:52 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1384
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1385
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1386
!Timestamp methodsFor:'converting'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1387
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1388
asAbsoluteTime
8254
73b6109ab982 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 8246
diff changeset
  1389
    "deprecated, use #asTimestamp"
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1390
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1391
    <resource:#obsolete>
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1392
9061
20af48b9b295 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9056
diff changeset
  1393
    self obsoleteMethodWarning:'use #asTimestamp'.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1394
    ^ self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1395
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1396
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1397
asDate
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1398
    "return a Date object from the receiver.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1399
     The returned date will only represent the day - not the timeOfDay."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1400
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1401
    ^ self timeInfo asDate 
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1402
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1403
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1404
     Timestamp now  
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1405
     Timestamp now asDate
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1406
     (Timestamp now addTime:3600) asDate 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1407
     (Timestamp now addTime:3600) asTime 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1408
     Timestamp fromSeconds:(Timestamp now asSeconds + 3600) 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1409
     (Timestamp fromSeconds:(Timestamp now asSeconds + 3600)) asDate  
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1410
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1411
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1412
11003
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1413
asLocalTimestamp
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1414
    "represent myself as a timestamp in the local timezone"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1415
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1416
    ^ self
11003
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1417
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1418
    "
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1419
     Timestamp now asUtcTimestamp
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1420
     Timestamp now asUtcTimestamp asLocalTimestamp
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1421
    "
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1422
!
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1423
7466
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1424
asMilliseconds
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1425
    "return the number of milliSeconds elapsed since whatever time the
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1426
     OperatingSystem bases its time upon. Since this is totally
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1427
     OS-dependent, do not interpret the value returned by this method.
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1428
     You can use it to add/subtract milliSeconds or get time deltas, though."
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1429
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1430
    ^ self getMilliseconds
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1431
!
87775b24d5ea category and comment change;
Claus Gittinger <cg@exept.de>
parents: 7327
diff changeset
  1432
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1433
asSeconds
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1434
    "return the number of seconds elapsed since whatever time the
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1435
     OperatingSystem bases its time upon. Since this is totally
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1436
     OS-dependent, do not interpret the value returned by this method.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1437
     You can use it to add/subtract seconds or get time deltas, though."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1438
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1439
    ^ self getSeconds
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1440
7004
6cd2080ea0a3 added asUTCSecondsSince1901
penk
parents: 6955
diff changeset
  1441
    "                                                 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1442
     Timestamp now asSeconds
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1443
     Timestamp fromSeconds:(Timestamp now asSeconds + 3600) 
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1444
     Time hour:23 minutes:33 seconds:0         
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1445
     Time fromSeconds:((Time hour:23 minutes:33 seconds:0) asSeconds + 3600) 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1446
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1447
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1448
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1449
asTime
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1450
    "return a Time object from the receiver.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1451
     The returned time will only represent the timeOfDay - not the day."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1452
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1453
    ^ self timeInfo asTime
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1454
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1455
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1456
     Timestamp now  
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1457
     Timestamp now asTime
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1458
     UtcTimestamp now asTime
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1459
     (Timestamp now addTime:3600) asTime 
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1460
    "
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1461
!
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1462
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1463
asTimestamp
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1464
    "return an Timestamp object from the receiver - thats the receiver."
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1465
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1466
    ^ self 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1467
!
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1468
9402
39ea6523196d new: #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 9385
diff changeset
  1469
asUtcTimestamp
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1470
    "represent myself as a timestamp in the UTC timezone"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1471
    
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1472
    ^ UtcTimestamp fromOSTime:osTime
9402
39ea6523196d new: #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 9385
diff changeset
  1473
39ea6523196d new: #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 9385
diff changeset
  1474
    "
11003
ffb8be9eb6ac +asLocalTimestamp
Claus Gittinger <cg@exept.de>
parents: 10736
diff changeset
  1475
     Timestamp now asUtcTimestamp
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1476
     Timestamp now asUtcTimestamp asLocalTimestamp
9402
39ea6523196d new: #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 9385
diff changeset
  1477
    "
39ea6523196d new: #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 9385
diff changeset
  1478
!
39ea6523196d new: #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 9385
diff changeset
  1479
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1480
literalArrayEncoding
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1481
    "encode myself as an array, from which a copy of the receiver
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1482
     can be reconstructed with #decodeAsLiteralArray.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1483
     The encoding is: 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1484
        (#Timestamp YYYYMMDDhhmmss.iii)
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1485
    "
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1486
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1487
    |s|
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1488
8223
56da5d8f8bc1 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  1489
    s := WriteStream on:(String new:18).
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1490
    self printGeneralizedOn:s isLocal:true.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1491
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1492
    ^ Array
9416
f57d66ea3bae Fix comments.
Stefan Vogel <sv@exept.de>
parents: 9402
diff changeset
  1493
        with:self class name
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1494
        with:s contents
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1495
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1496
    "
9416
f57d66ea3bae Fix comments.
Stefan Vogel <sv@exept.de>
parents: 9402
diff changeset
  1497
      Timestamp now literalArrayEncoding
f57d66ea3bae Fix comments.
Stefan Vogel <sv@exept.de>
parents: 9402
diff changeset
  1498
        decodeAsLiteralArray
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1499
    "
7006
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1500
!
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1501
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1502
utcSecondsSince1901
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1503
    "return the number of seconds elapsed since Jan, 1st 1901"
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1504
9430
919e0cb2257c Fix for utc botch when retrieving seconds since 1901
Stefan Vogel <sv@exept.de>
parents: 9416
diff changeset
  1505
"   
919e0cb2257c Fix for utc botch when retrieving seconds since 1901
Stefan Vogel <sv@exept.de>
parents: 9416
diff changeset
  1506
    secondsBetween1901and1970 := 
919e0cb2257c Fix for utc botch when retrieving seconds since 1901
Stefan Vogel <sv@exept.de>
parents: 9416
diff changeset
  1507
        ((Date day:1 month:1 year:1970) subtractDate:(Date day:1 month:1 year:1901))
919e0cb2257c Fix for utc botch when retrieving seconds since 1901
Stefan Vogel <sv@exept.de>
parents: 9416
diff changeset
  1508
        *  (24 * 60 * 60)
919e0cb2257c Fix for utc botch when retrieving seconds since 1901
Stefan Vogel <sv@exept.de>
parents: 9416
diff changeset
  1509
"
7006
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1510
9449
6ba774be6aa1 stc can compile large integers!
Stefan Vogel <sv@exept.de>
parents: 9433
diff changeset
  1511
    ^ self utcSecondsSince1970 + 2177452800.  
7006
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1512
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1513
    "                                                 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1514
     Timestamp now utcSecondsSince1901 
7006
8813a36f7645 checkin from browser
penk
parents: 7004
diff changeset
  1515
    "
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1516
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1517
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1518
!Timestamp methodsFor:'double dispatching'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1519
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1520
differenceFromTimestamp:aTimestamp
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1521
    "/ the correct thing to do (and I will, in the future) is to
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1522
    "/ return a TimeDuration:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1523
    "/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1524
    "/ ^ TimeDuration fromMilliseconds:(self getMilliseconds - (aTimestamp getMilliseconds))
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1525
    "/ which is the same as: deltaFrom:aTimestamp
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1526
    "/
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1527
    "/ however, there might be old code around, which is not be prepared for
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1528
    "/ getting a non-number (the seconds). Therefore, for the meantime,
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1529
    "/ we return:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1530
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1531
    ^ aTimestamp getSeconds - self getSeconds
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1532
    "/ which is the same as: secondDeltaFrom:aTimestamp
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1533
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1534
    "/ be prepared for a change here.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1535
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1536
    "Created: / 01-08-2011 / 16:38:10 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1537
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1538
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1539
!Timestamp methodsFor:'initialization'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1540
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1541
year:y month:m day:d hour:h minute:min second:s millisecond:millis 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1542
    osTime := OperatingSystem 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1543
                computeOSTimeFromYear:y
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1544
                month:m
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1545
                day:d
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1546
                hour:h
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1547
                minute:min
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1548
                seconds:s
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1549
                millis:millis
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1550
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1551
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  1552
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1553
!Timestamp methodsFor:'printing & storing'!
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1554
8111
67347b7e3e69 print bindings (care for language specifics)
Claus Gittinger <cg@exept.de>
parents: 7817
diff changeset
  1555
addPrintBindingsTo:dict language:languageOrNil
67347b7e3e69 print bindings (care for language specifics)
Claus Gittinger <cg@exept.de>
parents: 7817
diff changeset
  1556
    "private print support: add bindings for printing to aDictionary
67347b7e3e69 print bindings (care for language specifics)
Claus Gittinger <cg@exept.de>
parents: 7817
diff changeset
  1557
     languageOrNil can only be #en or nil for the current language."
5726
be29c70156c1 comments added
Claus Gittinger <cg@exept.de>
parents: 5719
diff changeset
  1558
8111
67347b7e3e69 print bindings (care for language specifics)
Claus Gittinger <cg@exept.de>
parents: 7817
diff changeset
  1559
    self asDate addPrintBindingsTo:dict language:languageOrNil.
6795
519894240d97 more printFormats: yearOrDate (as in unix); dayPadded and monthPadded
penk
parents: 6686
diff changeset
  1560
519894240d97 more printFormats: yearOrDate (as in unix); dayPadded and monthPadded
penk
parents: 6686
diff changeset
  1561
    self year == Date today year ifTrue:[
519894240d97 more printFormats: yearOrDate (as in unix); dayPadded and monthPadded
penk
parents: 6686
diff changeset
  1562
        dict at:#yearOrTime put:(self asTime printStringFormat:'%h:%m').
519894240d97 more printFormats: yearOrDate (as in unix); dayPadded and monthPadded
penk
parents: 6686
diff changeset
  1563
    ].
519894240d97 more printFormats: yearOrDate (as in unix); dayPadded and monthPadded
penk
parents: 6686
diff changeset
  1564
8111
67347b7e3e69 print bindings (care for language specifics)
Claus Gittinger <cg@exept.de>
parents: 7817
diff changeset
  1565
    super addPrintBindingsTo:dict language:languageOrNil.
4843
3a4484b834dd better printing
Claus Gittinger <cg@exept.de>
parents: 4839
diff changeset
  1566
!
3a4484b834dd better printing
Claus Gittinger <cg@exept.de>
parents: 4839
diff changeset
  1567
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1568
printGeneralizedOn:aStream 
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1569
    "append a representation of the receiver to aStream in a general format,
9385
f46f04a13052 comment
Stefan Vogel <sv@exept.de>
parents: 9061
diff changeset
  1570
     top-down, without separators: 'yyyymmddHHMMSS.mmm+0100'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1571
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1572
     This format is used for the ASN.1 GeneralizedTime as defined in X.208 Sec. 33,
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1573
     so read this before changing the output format."
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1574
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1575
    ^ self printGeneralizedOn:aStream isLocal:false short:false.
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1576
!
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1577
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1578
printGeneralizedOn:aStream isLocal:isLocal
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1579
    "append a representation of the receiver to aStream in a general format,
11177
f5faa6cb49ed fix typo in comment
Stefan Vogel <sv@exept.de>
parents: 11140
diff changeset
  1580
     top-down, without separators: 'yyyymmddHHMMSS.mmm+0100'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1581
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1582
     This format is used for the ASN.1 GeneralizedTime as defined in X.208 Sec. 33,
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1583
     so read this before changing the output format.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1584
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1585
     If isLocal is true, represent as local time, otherwise add UTC time offset."
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1586
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1587
    self printGeneralizedOn:aStream isLocal:isLocal short:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1588
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1589
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1590
    "Modified: / 1.7.1996 / 15:20:59 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1591
    "Modified: / 17.1.2000 / 15:53:02 / stefan"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1592
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1593
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1594
printGeneralizedOn:aStream isLocal:isLocal short:shortFormat
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1595
    "append a representation of the receiver to aStream in a general format,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1596
     top-down, without separators;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1597
        long format:  'yyyymmddHHMMSS.mmm+0100'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1598
        short format: 'yymmddHHMMSS.mmm+0100'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1599
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1600
     This format is used for the ASN.1 GeneralizedTime and UTCTime
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1601
     as defined in X.208 Sec. 33, so read this before changing the output format.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1602
     The short format is no longer recommended.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1603
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1604
     If isLocal is true, represent as local time, otherwise add UTC time offset."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1605
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1606
    |t off|
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1607
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  1608
    isLocal ifTrue:[
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1609
        t := self timeInfo.
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  1610
    ] ifFalse:[
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1611
        t := self asUtcTimestamp timeInfo.
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  1612
    ].
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  1613
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1614
    shortFormat ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1615
        self assert:(t year between:1951 and:2049).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1616
        (t year \\ 100) printOn:aStream leftPaddedTo:2 with:$0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1617
    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1618
        t year    printOn:aStream leftPaddedTo:4 with:$0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1619
    ].
7512
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1620
    t month   printOn:aStream leftPaddedTo:2 with:$0.
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1621
    t day     printOn:aStream leftPaddedTo:2 with:$0.
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1622
    t hours   printOn:aStream leftPaddedTo:2 with:$0. 
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1623
    t minutes printOn:aStream leftPaddedTo:2 with:$0.
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1624
    t seconds printOn:aStream leftPaddedTo:2 with:$0.
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1625
    aStream nextPut:$..
7512
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1626
    t milliseconds printOn:aStream leftPaddedTo:3 with:$0.
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1627
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1628
    isLocal ifFalse:[
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1629
        "/ this should be printed as non-local-time
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1630
7512
07c56e8934f4 OS returns OSTimeInfo (instead of an Array)
Claus Gittinger <cg@exept.de>
parents: 7474
diff changeset
  1631
        off := t utcOffset.
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1632
        (self isUtcTimestamp or:[off == 0]) ifTrue:[
5379
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1633
            aStream nextPut:$Z.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1634
        ] ifFalse:[ |min|
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1635
            off < 0 ifTrue:[
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1636
                aStream nextPut:$+.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1637
                off := off negated.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1638
            ] ifFalse:[
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1639
                aStream nextPut:$-.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1640
            ].
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1641
            min := off // 60.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1642
            min // 60 printOn:aStream leftPaddedTo:2 with:$0.
2cf681402817 Make literal array encoding architecture independent.
Stefan Vogel <sv@exept.de>
parents: 5376
diff changeset
  1643
            min \\ 60 printOn:aStream leftPaddedTo:2 with:$0.
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1644
        ].
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1645
    ].
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1646
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1647
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1648
     Timestamp now printGeneralizedOn:Transcript. Transcript cr. 
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  1649
     Timestamp now printGeneralizedOn:Transcript isLocal:true. Transcript cr. 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1650
     (Timestamp fromSeconds:0) printGeneralizedOn:Transcript. Transcript cr.
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1651
     Time now printOn:Transcript. Transcript cr.           
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1652
     Date today printOn:Transcript. Transcript cr.        
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1653
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1654
     Timestamp now printGeneralizedOn:Transcript isLocal:false short:false. Transcript cr. 
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1655
     UtcTimestamp now printGeneralizedOn:Transcript isLocal:false short:false. Transcript cr. 
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1656
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1657
     Date today asTimestamp printGeneralizedOn:Transcript. Transcript cr.           
5290
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1658
     Date today printOn:Transcript. Transcript cr.           
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1659
    "
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1660
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1661
    "Modified: / 1.7.1996 / 15:20:59 / cg"
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1662
    "Modified: / 17.1.2000 / 15:53:02 / stefan"
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1663
!
f26854f0f074 Add #printGeneralizedOn:
Stefan Vogel <sv@exept.de>
parents: 4930
diff changeset
  1664
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1665
printISO8601
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1666
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1667
    ^ TimestampISO8601Builder print: self
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1668
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1669
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1670
     Timestamp now printISO8601           
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1671
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1672
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1673
    "Created: / 16-06-2005 / 16:11:15 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1674
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1675
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1676
printISO8601Compressed
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1677
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1678
    ^ TimestampISO8601Builder printCompressed: self
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1679
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1680
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1681
     Timestamp now printISO8601Compressed           
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1682
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1683
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1684
    "Created: / 16-06-2005 / 16:11:31 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1685
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1686
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1687
printISO8601CompressedOn: aStream
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1688
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1689
    TimestampISO8601Builder printCompressed: self on: aStream
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1690
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1691
    "Created: / 16-06-2005 / 16:11:50 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1692
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1693
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1694
printISO8601On: aStream
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1695
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1696
    TimestampISO8601Builder print: self on: aStream
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1697
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1698
    "Created: / 16-06-2005 / 16:11:07 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1699
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1700
8479
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1701
printIso8601FormatOn:aStream
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1702
    "append the iso8601 representation of the receiver to aStream.
8479
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1703
     This format looks like:
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1704
        1999-01-01T24:00:00
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1705
     or, for zero hr:min:sec, 
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1706
        1999-01-01
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1707
     Of course, a 24 hour clock is used.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1708
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1709
     No timezone information (eg. Z or +0100) is added, so the reader will read as local time."
8479
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1710
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1711
    |format|
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1712
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1713
    format := '%(year)-%(month)-%(day)T%h:%m:%s.%i'.
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1714
    self milliseconds = 0 ifTrue:[
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1715
        format := '%(year)-%(month)-%(day)T%h:%m:%s'.
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1716
        self seconds = 0 ifTrue:[
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1717
            format := '%(year)-%(month)-%(day)T%h:%m'.
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1718
            ((self hours = 0) and:[self minutes = 0]) ifTrue:[
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1719
                format := '%(year)-%(month)-%(day)'.
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1720
            ]
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1721
        ]
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1722
    ].
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1723
    self printOn:aStream format:format 
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1724
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1725
    "
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1726
     Timestamp now printIso8601FormatOn:Transcript   
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1727
     Timestamp readIso8601FormatFrom:(Timestamp now printStringIso8601Format).
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1728
    "
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1729
!
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1730
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1731
printOn:aStream
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1732
    "append a user readable representation of the receiver to aStream.
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1733
     The format is compatible with readFromString:, but not with readFrom:."
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1734
6684
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
  1735
    "/ now, use ISO format...
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
  1736
    self printOn:aStream format:'%(year)-%(mon)-%(day) %h:%m:%s.%i'  
1f4d15ab7c4c default printString is now iso format.
Claus Gittinger <cg@exept.de>
parents: 6634
diff changeset
  1737
"/    self printOn:aStream format:'%(Day)-%(mon)-%(year) %h:%m:%s.%i'  
5678
5e1e70d18067 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5677
diff changeset
  1738
"/    self printOn:aStream format:'%(mon)/%(Day)/%(year) %h:%m:%s.%i'  
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1739
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1740
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1741
     Timestamp now printOn:Transcript. Transcript cr. 
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1742
     (Timestamp fromSeconds:0) printOn:Transcript. Transcript cr.
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1743
     Time now printOn:Transcript. Transcript cr.           
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1744
     Date today printOn:Transcript. Transcript cr.        
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1745
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1746
     Time now asTimestamp printOn:Transcript. Transcript cr.           
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1747
     Timestamp now printOn:Transcript. Transcript cr. 
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1748
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1749
     Date today asTimestamp printOn:Transcript. Transcript cr.           
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1750
     Date today printOn:Transcript. Transcript cr.           
92
0c73b48551ac *** empty log message ***
claus
parents: 82
diff changeset
  1751
    "
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1752
5719
cf09067dbd1d can do millisecondDelta easier
Claus Gittinger <cg@exept.de>
parents: 5678
diff changeset
  1753
    "Modified: 1.7.1996 / 15:20:59 / cg"
cf09067dbd1d can do millisecondDelta easier
Claus Gittinger <cg@exept.de>
parents: 5678
diff changeset
  1754
!
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1755
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1756
printRFC1123FormatOn:aStream
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1757
    "append the RFC1123 representation of the receiver to aStream.
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1758
     This format is used in HTTP requests and looks like:
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1759
        'Fri, 04 Jul 2003 15:56:11 GMT'
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1760
     (always GMT and all names in english)"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1761
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1762
"/       HTTP-date      = rfc1123-date | rfc850-date | asctime-date
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1763
"/
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1764
"/       rfc1123-date   = wkday "," SP date1 SP time SP "GMT"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1765
"/       rfc850-date    = weekday "," SP date2 SP time SP "GMT"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1766
"/       asctime-date   = wkday SP date3 SP time SP 4DIGIT
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1767
"/
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1768
"/       date1          = 2DIGIT SP month SP 4DIGIT
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1769
"/                        ; day month year (e.g., 02 Jun 1982)
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1770
"/       date2          = 2DIGIT "-" month "-" 2DIGIT
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1771
"/                        ; day-month-year (e.g., 02-Jun-82)
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1772
"/       date3          = month SP ( 2DIGIT | ( SP 1DIGIT ))
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1773
"/                        ; month day (e.g., Jun  2)
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1774
"/
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1775
"/       time           = 2DIGIT ":" 2DIGIT ":" 2DIGIT
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1776
"/                        ; 00:00:00 - 23:59:59
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1777
"/
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1778
"/       wkday          = "Mon" | "Tue" | "Wed"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1779
"/                      | "Thu" | "Fri" | "Sat" | "Sun"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1780
"/
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1781
"/       weekday        = "Monday" | "Tuesday" | "Wednesday"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1782
"/                      | "Thursday" | "Friday" | "Saturday" | "Sunday"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1783
"/
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1784
"/       month          = "Jan" | "Feb" | "Mar" | "Apr"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1785
"/                      | "May" | "Jun" | "Jul" | "Aug"
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1786
"/                      | "Sep" | "Oct" | "Nov" | "Dec"
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1787
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1788
    |timeInfo|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1789
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1790
    timeInfo := self asUtcTimestamp timeInfo.
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1791
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1792
    aStream nextPutAll:(#('Mon' 'Tue' 'Wed' 'Thu' 'Fri' 'Sat' 'Sun') at:timeInfo dayInWeek);
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1793
            nextPutAll:', '.
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1794
    timeInfo day printOn:aStream leftPaddedTo:2 with:$0.
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1795
    aStream space.
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1796
    aStream nextPutAll:(#('Jan' 'Feb' 'Mar' 'Apr' 'May' 'Jun' 'Jul' 'Aug' 'Sep' 'Oct' 'Nov' 'Dec') at:timeInfo month).
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1797
7677
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1798
"/ the following is too slow for heavy use    
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1799
"/    timeInfo printOn:aStream format:'%(ShortDayName), %(day) %(ShortMonthName) %y %h:%m:%s GMT' language:#en. 
7677
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1800
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1801
    aStream nextPut:Character space.
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1802
    timeInfo year printOn:aStream.
7677
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1803
    aStream nextPut:Character space.
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1804
    timeInfo hours printOn:aStream leftPaddedTo:2 with:$0.
7677
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1805
    aStream nextPut:$:.
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1806
    timeInfo minutes printOn:aStream leftPaddedTo:2 with:$0.
7677
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1807
    aStream nextPut:$:.
7734
650ececb37bb tuning printRFC1123FormatOn
penk
parents: 7733
diff changeset
  1808
    timeInfo seconds printOn:aStream leftPaddedTo:2 with:$0.
7677
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1809
    aStream nextPutAll:' GMT'.
e2b4eb2824c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7671
diff changeset
  1810
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1811
    "
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1812
     String streamContents:[:s| Timestamp now printRFC1123FormatOn:s]   
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1813
    "
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1814
!
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1815
8479
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1816
printStringIso8601Format
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1817
    "return the Iso8601 representation of the receiver.
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1818
     This format looks like:
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1819
        1999-01-01T24:00:00
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1820
     or, for zero hr:min:sec, 
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1821
        1999-01-01
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1822
     Of course, a 24 hour clock is used."
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1823
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1824
    ^ String streamContents:[:s | self printIso8601FormatOn:s]
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1825
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1826
    "
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1827
     Timestamp now printStringIso8601Format
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1828
    "
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1829
!
3eda51fcb74c isoFormat fixes
Claus Gittinger <cg@exept.de>
parents: 8432
diff changeset
  1830
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1831
printStringRFC1123Format
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1832
    "return the RFC1123 representation of the receiver.
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1833
     This format is used in HTTP requests and looks like:
7671
fc0a27888051 Fix #printRFC1123FormatOn:
Stefan Vogel <sv@exept.de>
parents: 7512
diff changeset
  1834
        'Fri, 04 Jul 2003 15:56:11 GMT'
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1835
     (always GMT)"
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1836
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1837
    ^ String streamContents:[:s | self printRFC1123FormatOn:s]
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1838
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1839
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1840
     Timestamp now printStringRFC1123Format
7474
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1841
    "
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1842
!
e2dbf8bc10ab RFC1123 printing
Claus Gittinger <cg@exept.de>
parents: 7466
diff changeset
  1843
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1844
storeOn:aStream
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1845
    "store the receiver in a format suitable for reconstruction of the
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
  1846
     receiver via readFrom:
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
  1847
     Use a OS/architecture independent format"
275
a76029ddaa98 *** empty log message ***
claus
parents: 242
diff changeset
  1848
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1849
    aStream nextPut:$(; 
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1850
            nextPutAll:self class name; 
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
  1851
            nextPutAll:' readIso8601FormatFrom:'''.
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
  1852
    self printIso8601FormatOn:aStream.
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
  1853
    aStream nextPutAll:''')'.
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 30
diff changeset
  1854
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1855
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1856
     Timestamp now storeString 
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1857
8822
10d99a9248f2 #storeOn: stores in ISO 8601 format.
Stefan Vogel <sv@exept.de>
parents: 8797
diff changeset
  1858
     Object readFrom:(Timestamp now storeString) readStream
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1859
     Timestamp readFrom:(Timestamp now storeString) readStream
241
6f30be88e314 *** empty log message ***
claus
parents: 213
diff changeset
  1860
    "
30
c5f5604e0c0a Initial revision
claus
parents:
diff changeset
  1861
! !
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1862
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1863
!Timestamp methodsFor:'private'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1864
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1865
fromOSTime:anUninterpretedOSTime
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1866
    "strictly private: set the seconds from an OS time (since whatever)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1867
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1868
    osTime := anUninterpretedOSTime
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1869
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1870
    "Created: 1.7.1996 / 14:33:21 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1871
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1872
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1873
getMilliseconds
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1874
    "strictly private: return the milliseconds (since whatever)"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1875
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1876
    ^ osTime
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1877
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1878
    "Created: 1.7.1996 / 14:33:56 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1879
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1880
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1881
getSeconds
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1882
    "strictly private: return the seconds (since whatever)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1883
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1884
    ^ osTime // 1000
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1885
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1886
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1887
setMilliseconds:millis
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1888
    "strictly private: set the milliseconds (since whatever)"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1889
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1890
    osTime := millis.
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1891
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1892
    "Modified: 20.12.1995 / 11:46:36 / stefan"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1893
    "Created: 1.7.1996 / 14:34:24 / cg"
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1894
!
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1895
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1896
setSeconds:secs
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1897
    "strictly private: set the seconds (since whatever)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1898
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1899
    osTime := secs * 1000.
795
ff477bad0f2d fix setSeconds:
Stefan Vogel <sv@exept.de>
parents: 699
diff changeset
  1900
ff477bad0f2d fix setSeconds:
Stefan Vogel <sv@exept.de>
parents: 699
diff changeset
  1901
    "Modified: 20.12.1995 / 11:46:36 / stefan"
1501
2589005c849d time changes
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1902
    "Modified: 1.7.1996 / 14:34:10 / cg"
5853
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1903
!
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1904
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1905
utcSecondsSince1970
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1906
    "return the UTC seconds since 1970"
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1907
9430
919e0cb2257c Fix for utc botch when retrieving seconds since 1901
Stefan Vogel <sv@exept.de>
parents: 9416
diff changeset
  1908
    ^ self getSeconds
5853
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1909
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1910
    "
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  1911
     Timestamp now utcSecondsSince1970
5853
bee515a21a30 added #utcSecondsSince1970
martin
parents: 5839
diff changeset
  1912
    "
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1913
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1914
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1915
!Timestamp methodsFor:'testing'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1916
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1917
isTimestamp
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1918
    ^ true
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1919
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1920
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1921
isUtcTimestamp
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1922
    ^ false
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1923
! !
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1924
8396
b13503dbc53c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8286
diff changeset
  1925
!Timestamp methodsFor:'visiting'!
b13503dbc53c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8286
diff changeset
  1926
b13503dbc53c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8286
diff changeset
  1927
acceptVisitor:aVisitor with:aParameter
b13503dbc53c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8286
diff changeset
  1928
    ^ aVisitor visitTimestamp:self with:aParameter
b13503dbc53c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8286
diff changeset
  1929
! !
b13503dbc53c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8286
diff changeset
  1930
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1931
!Timestamp::TimestampBuilderAbstract methodsFor:'error reporting'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1932
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1933
malformed:aString
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1934
    TimeConversionError raiseErrorString:(' - ', aString)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1935
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1936
    "Created: / 15-06-2005 / 15:54:04 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1937
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1938
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1939
!Timestamp::TimestampBuilderAbstract methodsFor:'support'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1940
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1941
addHoursAndMinutes: arrayWithHoursAndMinutes
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1942
    "Add the given number of hours and minutes to the current timestamp state. If the time
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1943
    is to be subtracted, both numbers in the array must be negated. When the are not the same
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1944
    sign, the behavior may be strange. It's intended only for time zone corrections, where
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1945
    not more than 12 (in fact, 23) hours is added or subtracted (ie. date can be modified only
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1946
    one day forward or backward)."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1947
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1948
    | hours minutes |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1949
    hours := arrayWithHoursAndMinutes first.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1950
    minutes := arrayWithHoursAndMinutes second.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1951
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1952
    minutes isZero ifFalse: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1953
        minute := minute + minutes.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1954
        minute >= 60 ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1955
            hours := hours + minute // 60.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1956
            minute := minute \\ 60.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1957
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1958
        minute < 0 ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1959
            hours := hours + minute // 60.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1960
            minute := (minute \\ 60) negated
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1961
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1962
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1963
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1964
    "Hours may get zero by time zone specification or by minutes modifications above."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1965
    hours isZero ifTrue: [^self].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1966
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1967
    "Add or subtract the hour and make date corrections if necessary."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1968
    hour := hour + hours.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1969
    hour < 0 ifTrue: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1970
        "Oops, got to previous day, must adjust even the date."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1971
        hour := 24 - ((hour negated) \\ 24).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1972
        day := day - 1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1973
        day <= 0 ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1974
            "Got to previous month..."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1975
            month := month - 1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1976
            month <= 0 ifTrue: [year := year - 1. month := 12].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1977
            day := self lastDayInMonth: month]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1978
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1979
    hour >= 24 ifTrue: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1980
        hour := hour \\ 24.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1981
        day := day + 1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1982
        day > (self lastDayInMonth: month) ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1983
            month := month + 1.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1984
            month > 12 ifTrue: [year := year + 1. month := 1].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1985
            day := 1]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1986
    ]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1987
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1988
    "Created: / 15-06-2005 / 16:45:49 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1989
    "Modified: / 16-06-2005 / 15:04:45 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1990
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1991
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1992
dateFromDayNumber: anInteger
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1993
    "Set month and day from an absolute number of the day in the year. 1.1. is day number one."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1994
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1995
    | leap |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1996
    leap := self isLeapYear: year.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1997
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1998
    (anInteger between: 1 and: 365) ifFalse: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  1999
        (leap and: [anInteger = 366])
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2000
            ifFalse: [self malformed: 'Bad day number: ' , anInteger printString]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2001
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2002
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2003
    self shouldImplement
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2004
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2005
    "Created: / 15-06-2005 / 11:27:35 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2006
    "Modified: / 16-06-2005 / 12:31:37 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2007
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2008
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2009
dateFromWeek: weekInteger andWeekday: dayInteger
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2010
    "Compute the month and day. Find the first day (weekday) in the year, maybe even
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2011
    adjust the year. Both week and day are 1-based, the first week in a year is the one
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2012
    with thursday (or the one containing 4.1.)."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2013
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2014
    "Check numbers. Year may be checked if it contains 53 weeks or 52 weeks only."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2015
    (dayInteger between: 1 and: 7) ifFalse: [self malformed: 'Bad weekday number: ' , dayInteger printString].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2016
    (weekInteger between: 1 and: 53) ifFalse: [self malformed: 'Bad week number: ' , weekInteger printString].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2017
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2018
    self shouldImplement
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2019
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2020
    "Created: / 15-06-2005 / 11:29:42 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2021
    "Modified: / 15-06-2005 / 16:42:33 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2022
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2023
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2024
isAllowedDay: anInteger
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2025
    "Answer whether the given day is allowed in the current month."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2026
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2027
    ^anInteger between: 1 and: (self lastDayInMonth: month)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2028
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2029
    "Created: / 15-06-2005 / 16:22:51 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2030
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2031
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2032
isLeapYear: anInteger
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2033
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2034
    ^(anInteger bitAnd: 3) = 0 and: [anInteger \\ 100 > 0 or: [anInteger \\ 400 = 0]]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2035
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2036
    "Created: / 15-06-2005 / 16:16:31 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2037
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2038
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2039
lastDayInMonth: anInteger
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2040
    "Answer the number of the last day of the given month in the current year."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2041
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2042
    ^anInteger = 2
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2043
        ifTrue: [(self isLeapYear: year) ifTrue: [29] ifFalse: [28]]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2044
        ifFalse: [#(31 28 31 30 31 30 31 31 30 31 30 31) at: month]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2045
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2046
    "Created: / 15-06-2005 / 17:12:31 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2047
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2048
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2049
timestampWithClass:timestampClass
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2050
    "Answer the timestamp as it has been parsed."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2051
    "Notes:
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2052
     - When reading, the time has either been adjusted to UTZ/zulu time,
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2053
       or is a local time.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2054
     - On UNIX, timestamps can only hold dates between 1970-01-01T01:00:00Z and 2038-01-19T00:00:00Z"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2055
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2056
    isUtcTime ifTrue:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2057
        ^ timestampClass
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2058
            UTCYear: year month: month day: day
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2059
            hour: hour minute: minute second: second millisecond: millisecond
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2060
    ] ifFalse:[
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2061
        ^ timestampClass
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2062
            year: year month: month day: day
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2063
            hour: hour minute: minute second: second millisecond: millisecond
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2064
    ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2065
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2066
    "Created: / 15-06-2005 / 15:39:24 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2067
    "Modified: / 30-06-2005 / 16:48:25 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2068
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2069
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2070
!Timestamp::TimestampISO8601Builder class methodsFor:'documentation'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2071
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2072
documentation
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2073
"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2074
    TimestampISO8601Builder is designed to read any (almost) format of ISO 8601 encoded timestamp. Also, class
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2075
    methods can be used to print but the main reading job is done in instance protocol. It has been
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2076
    written because of insufficient abilities of Timestamp #readIso8601FormatFrom: method.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2077
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2078
    It produces timestamps, ie. when the string (or stream) contains only a time, an error will result
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2079
    (it may also pass in some cases but with the time undestood as date). It survives incomplete dates,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2080
    broken years, incomplete times and timezones. All times read with timezone difference are recomputed
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2081
    to UTC before the timestamp is created (even passing across new year boundary is handled correctly).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2082
    Unknown offsets (usually local) are considered UTC - this may be wrong and more work is probably needed.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2083
    All data is checked for validity (including leap years, leap seconds,...) during reading and as soon as
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2084
    possible. For an example of what the builder can read, see the examples method and ISO 8601 itself.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2085
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2086
    [author:]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2087
        Martin Dvorak (masca@volny.cz)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2088
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2089
    [instance variables:]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2090
        stream          A stream the builder operates on. Assigned on each call to instance method #read:,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2091
                        so the builder instance can be reused (by at most one thread).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2092
        year            Current timestamp year. No default value, date must be present.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2093
        month           Current timestamp month. May change during parsing. Defaults to 1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2094
        day             Current timestamp day. Defaults to 1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2095
        hour            Current timestamp hour. Defaults to 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2096
        minute          Current timestamp minute. Defaults to 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2097
        second          Current timestamp second. Defaults to 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2098
        millisecond     Current timestamp millisecond. Defaults to 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2099
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2100
    [see also:]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2101
        Timestamp
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2102
"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2103
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2104
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2105
examples
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2106
"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2107
    See the testing protocol on instance protocol (should be turned into a TestCase).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2108
    It covers the main features this builder has.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2109
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2110
    Just to introduce some coding examples, try:
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2111
        Timestamp readISO8601From: (TimestampISO8601Builder print: Timestamp now)
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2112
        UtcTimestamp readISO8601From: (TimestampISO8601Builder print: UtcTimestamp now)
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2113
        Timestamp readISO8601From: (TimestampISO8601Builder print: UtcTimestamp now)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2114
"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2115
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2116
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2117
history
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2118
    "Created: / 16-06-2005 / 16:28:38 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2119
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2120
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2121
!Timestamp::TimestampISO8601Builder class methodsFor:'parsing'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2122
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2123
read: stringOrStream withClass:timestampClass
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2124
    ^ self new read:stringOrStream withClass:timestampClass
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2125
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2126
    "Created: / 15-06-2005 / 17:52:03 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2127
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2128
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2129
!Timestamp::TimestampISO8601Builder class methodsFor:'printing'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2130
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2131
print: aTimestamp
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2132
    "Print the given timestamp in general ISO8601 format."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2133
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2134
    | stream |
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2135
    stream := '' writeStream.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2136
    self print: aTimestamp on: stream.
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2137
    ^ stream contents
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2138
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2139
    "Created: / 15-06-2005 / 17:52:29 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2140
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2141
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2142
print: aTimestamp on: aStream
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2143
    "Print the given timestamp in general ISO8601 format."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2144
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2145
    |timeInfo|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2146
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2147
    timeInfo := aTimestamp asUtcTimestamp timeInfo.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2148
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2149
    aStream
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2150
        nextPutAll: (timeInfo year printStringRadix: 10 size: 4 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2151
        nextPut: $-;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2152
        nextPutAll: (timeInfo month printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2153
        nextPut: $-;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2154
        nextPutAll: (timeInfo day printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2155
        nextPut: $T;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2156
        nextPutAll: (timeInfo hours printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2157
        nextPut: $:;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2158
        nextPutAll: (timeInfo minutes printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2159
        nextPut: $:;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2160
        nextPutAll: (timeInfo seconds printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2161
        nextPut: $Z
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2162
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2163
    "Created: / 15-06-2005 / 17:56:51 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2164
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2165
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2166
printCompressed: aTimestamp
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2167
    "Print in special compressed format for timestamp interchange with mobile devices."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2168
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2169
    | stream |
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2170
    stream := '' writeStream.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2171
    self printCompressed: aTimestamp on: stream.
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2172
    ^ stream contents
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2173
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2174
    "Created: / 15-06-2005 / 17:52:52 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2175
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2176
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2177
printCompressed: aTimestamp on: aStream
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2178
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2179
    |timeInfo|
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2180
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2181
    timeInfo := aTimestamp asUtcTimestamp timeInfo.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2182
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2183
    aStream
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2184
        nextPutAll: (timeInfo year printStringRadix: 10 size: 4 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2185
        nextPutAll: (timeInfo month printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2186
        nextPutAll: (timeInfo day printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2187
        nextPut: $T;
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2188
        nextPutAll: (timeInfo hours printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2189
        nextPutAll: (timeInfo minutes printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2190
        nextPutAll: (timeInfo seconds printStringRadix: 10 size: 2 fill: $0);
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2191
        nextPut: $Z
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2192
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2193
    "Created: / 15-06-2005 / 17:54:17 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2194
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2195
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2196
!Timestamp::TimestampISO8601Builder class methodsFor:'testing'!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2197
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2198
test
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2199
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2200
    self test_date.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2201
    self test_time.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2202
    self test_timezone.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2203
    self test_edge.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2204
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2205
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2206
        TimestampISO8601Builder test
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2207
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2208
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2209
    "Created: / 15-06-2005 / 17:51:16 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2210
    "Modified: / 16-06-2005 / 10:15:55 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2211
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2212
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2213
test_date
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2214
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2215
    | ts |
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2216
    ts := UtcTimestamp
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2217
         year: 2005 month: 6 day: 15
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2218
         hour: 0 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2219
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2220
    "Test common dates"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2221
    self assert: ts = (self read: '20050615' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2222
    self assert: ts = (self read: '2005-06-15'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2223
    self assert: ts = (self read: '05-06-15'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2224
    self assert: ts = (self read: '05-0615'  withClass:Timestamp). "/ Is this correct?
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2225
    self assert: ts = (self read: ':50615'  withClass:Timestamp). "/ Should not happen and should not appear after 2009
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2226
    self assert: ts = (self read: '200506-15'  withClass:Timestamp). "/ Is this corect?
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2227
    self assert: ts = (self read: '105-06-15'  withClass:Timestamp). "/ Should not happen
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2228
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2229
    "Test week numbers"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2230
    "/self assert: ts = (self read: '05W243'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2231
    "/self assert: ts = (self read: '2005W24-3'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2232
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2233
    "Test day numbers"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2234
    "self assert: ts = (self read: '2005-166'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2235
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2236
    ts := Timestamp year: 2004 month: 12 day: 31 hour: 0 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2237
    self assert: ts = (self read: '2004-366'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2238
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2239
    ts := Timestamp year: 2005 month: 12 day: 31 hour: 0 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2240
    self assert: ts = (self read: '2004-365'  withClass:Timestamp)."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2241
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2242
    "Test february"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2243
    ts := UtcTimestamp year: 2000 month: 2 day: 28 hour: 0 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2244
    self assert: ts = (self read: '20000228'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2245
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2246
    ts := UtcTimestamp year: 2000 month: 2 day: 29 hour: 0 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2247
    self assert: ts = (self read: '20000229'  withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2248
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2249
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2250
        TimestampISO8601Builder new test_date
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2251
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2252
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2253
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2254
    "Created: / 15-06-2005 / 17:21:56 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2255
    "Modified: / 16-06-2005 / 11:50:04 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2256
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2257
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2258
test_edge
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2259
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2260
    | ts |
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2261
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2262
    self test_mustFail: [self read: '20050229' withClass:Timestamp].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2263
    self test_mustFail: [self read: '20050029' withClass:Timestamp].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2264
    self test_mustFail: [self read: '20050332' withClass:Timestamp].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2265
    self test_mustFail: [self read: '2005-366' withClass:Timestamp].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2266
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2267
    ts := UtcTimestamp year: 2005 month: 1 day: 1 hour: 0 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2268
    self assert: ts = (self read: '20041231T22-0200' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2269
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2270
    ts := UtcTimestamp year: 2004 month: 12 day: 31 hour: 22 minute: 0 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2271
    self assert: ts = (self read: '20050101T0000+0200' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2272
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2273
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2274
        TimestampISO8601Builder new test_edge
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2275
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2276
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2277
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2278
    "Created: / 16-06-2005 / 09:44:34 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2279
    "Modified: / 16-06-2005 / 11:48:59 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2280
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2281
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2282
test_mustFail: aBlock
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2283
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2284
    TimeConversionError
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2285
        handle: [:ex | ex return]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2286
        do: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2287
            aBlock value.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2288
            self error: 'Assertion failed'
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2289
        ]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2290
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2291
    "Created: / 16-06-2005 / 09:43:37 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2292
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2293
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2294
test_time
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2295
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2296
    | ts |
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2297
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2298
    ts := UtcTimestamp  year: 2005 month: 6 day: 15 hour: 17 minute: 37 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2299
    self assert: ts = (self read: '2005-06-15 17:37' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2300
    self assert: ts = (self read: '20050615T1737' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2301
    self assert: ts = (self read: '05-0615T17:3700' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2302
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2303
    ts := UtcTimestamp  year: 2005 month: 6 day: 15 hour: 17 minute: 37 second: 0 millisecond: 30.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2304
    self assert: ts = (self read: '05-0615T17:3700.03' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2305
    self assert: ts = (self read: '2005-06-15T17:37:00.0305486-00:00' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2306
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2307
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2308
        TimestampISO8601Builder new test_time
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2309
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2310
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2311
    "Created: / 15-06-2005 / 17:39:26 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2312
    "Modified: / 16-06-2005 / 11:54:30 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2313
!
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2314
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2315
test_timezone
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2316
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2317
    | ts |
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2318
    ts := UtcTimestamp
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2319
         year: 2005 month: 6 day: 15
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2320
         hour: 17 minute: 37 second: 0 millisecond: 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2321
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2322
    self assert: ts = (self read: '2005-06-15T17:37Z' withClass:UtcTimestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2323
    self assert: ts = (self read: '2005-06-15T17:37+0000' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2324
    self assert: ts = (self read: '2005-06-15T17:37-00:00' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2325
    self assert: ts = (self read: '2005-06-15T15:37:00-0200' withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2326
    self assert: ts = (self read: '2005-06-15T19:37:00+0200'withClass:Timestamp).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2327
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2328
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2329
        TimestampISO8601Builder new test_timezone
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2330
    "
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2331
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2332
    "Created: / 15-06-2005 / 17:40:23 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2333
    "Modified: / 16-06-2005 / 10:17:57 / masca"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2334
! !
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2335
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2336
!Timestamp::TimestampISO8601Builder methodsFor:'private-reading'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2337
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2338
nextDigit
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2339
    | char |
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2340
    char := stream peekOrNil.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2341
    char isNil ifTrue: [^-1].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2342
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2343
    ^char isDigit
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2344
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2345
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2346
            char codePoint - $0 codePoint]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2347
        ifFalse: [-1]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2348
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2349
    "Created: / 14-06-2005 / 11:48:52 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2350
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2351
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2352
nextDigitOrError
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2353
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2354
    | digit |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2355
    digit := self nextDigit.
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2356
    ^ digit < 0
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2357
        ifTrue: [self malformed: 'No digit found']
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2358
        ifFalse: [digit]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2359
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2360
    "Created: / 15-06-2005 / 10:57:00 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2361
    "Modified: / 15-06-2005 / 17:22:52 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2362
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2363
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2364
nextDigits: anInteger
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2365
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2366
    | char number |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2367
    number := 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2368
    anInteger timesRepeat: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2369
        char := stream peekOrNil.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2370
        char ifNil: [self malformed: 'Stream does not contain all ' , anInteger printString , ' digits'].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2371
        char isDigit
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2372
            ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2373
                stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2374
                number := number * 10 + char codePoint - $0 codePoint]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2375
            ifFalse: [self malformed: 'Requested ' , anInteger printString , ' digits not found']
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2376
    ].
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2377
    ^ number
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2378
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2379
    "Created: / 14-06-2005 / 11:57:22 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2380
    "Modified: / 15-06-2005 / 15:54:29 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2381
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2382
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2383
!Timestamp::TimestampISO8601Builder methodsFor:'processing'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2384
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2385
read:stringOrStream withClass:timestampClass
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2386
    | peek |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2387
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2388
    stream := stringOrStream readStream.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2389
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2390
    month := day := 1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2391
    hour := minute := second := millisecond := 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2392
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2393
    "Read the year. This will read and swallow up to four year digits."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2394
    self readYear.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2395
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2396
    "Check if date has been read, ie. T or space necountered. If yes, read the time.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2397
    There is possible inconsistency - a dash may be read followed by T, which is not
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2398
    valid. But don't mind that, timestamps will be well-formatted in most cases."
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2399
    peek := stream peekOrNil.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2400
    peek ifNil: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2401
        "End of stream, only year has been read."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2402
        ^self timestampWithClass:timestampClass].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2403
    peek = $- ifTrue: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2404
        "Skip the dash after year, if present."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2405
        stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2406
        peek := stream peekOrNil].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2407
    peek := peek asUppercase.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2408
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2409
    (peek = $T or: [peek = Character space])
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2410
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2411
            "Got time signature. Skip the signature, read time and answer the timestamp."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2412
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2413
            self readTime.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2414
            self readTimezone.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2415
            ^ self timestampWithClass:timestampClass]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2416
        ifFalse: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2417
            "Date not read completely yet, expecting month/day or week/day or day"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2418
            peek = $W
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2419
                ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2420
                    "Parse week number and (possibly) day number."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2421
                    stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2422
                    self readWeekNumber]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2423
                ifFalse: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2424
                    "Got digit, read month number followed by day or day number."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2425
                    self readMonthOrDay]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2426
        ].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2427
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2428
    peek := stream peekOrNil.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2429
    peek ifNil: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2430
        "End of stream, only year has been read."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2431
        ^ self timestampWithClass:timestampClass].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2432
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2433
    (peek asUppercase = $T or: [peek = Character space])
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2434
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2435
            "Got time signature, expecting time follows. Otherwise only date was in the stream."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2436
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2437
            self readTime.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2438
            self readTimezone].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2439
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2440
    ^ self timestampWithClass:timestampClass
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2441
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2442
    "Created: / 14-06-2005 / 11:45:04 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2443
    "Modified: / 16-06-2005 / 10:15:35 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2444
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2445
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2446
!Timestamp::TimestampISO8601Builder methodsFor:'reading'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2447
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2448
readMilliseconds
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2449
    "Read an arbitrary number of digits representing milliseconds. As the timestamp can
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2450
    hold only integer amounts of milliseconds, don't mind the rest of the digits."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2451
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2452
    | digit factor |
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2453
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2454
    factor := 100.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2455
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2456
    [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2457
        digit := self nextDigit.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2458
        digit >= 0
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2459
    ] whileTrue: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2460
        factor > 0 ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2461
            "Factor still > 0, did not read all three digits of mantissa."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2462
            millisecond := digit * factor + millisecond.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2463
            factor := (factor / 10) integerPart
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2464
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2465
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2466
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2467
    factor = 100 ifTrue: [self malformed: 'No digits after millisecond separator']
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2468
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2469
    "Created: / 15-06-2005 / 15:25:45 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2470
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2471
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2472
readMonthOrDay
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2473
    "Read month number, optionally followed by day, or absolute day number (three digit)."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2474
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2475
    | dayDigit1 dayDigit2 |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2476
    month := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2477
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2478
    stream peekOrNil = $-
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2479
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2480
            "Got dash. Day number must follow."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2481
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2482
            day := self nextDigits: 2.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2483
            (self isAllowedDay: day) ifFalse: [self malformed: 'Bad day: ' , day printString].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2484
            ^self].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2485
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2486
    dayDigit1 := self nextDigit.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2487
    dayDigit1 < 0 ifTrue: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2488
        "No more digits than month, leave day unspecified."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2489
        (month between: 1 and: 12) ifFalse: [self malformed: 'Bad month: ' , month printString].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2490
        ^self].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2491
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2492
    dayDigit2 := self nextDigit.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2493
    dayDigit2 < 0
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2494
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2495
            "Read only three digits, this is absolute day number in a year."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2496
            self dateFromDayNumber: month * 10 + dayDigit1]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2497
        ifFalse: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2498
            "Read four digits. So there's month and day."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2499
            (month between: 1 and: 12) ifFalse: [self malformed: 'Bad month: ' , month printString].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2500
            day := dayDigit1 * 10 + dayDigit2.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2501
            (self isAllowedDay: day) ifFalse: [self malformed: 'Bad day: ' , day printString]]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2502
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2503
    "Created: / 15-06-2005 / 11:12:02 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2504
    "Modified: / 16-06-2005 / 11:47:34 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2505
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2506
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2507
readTime
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2508
    "Date read, don't mind it. Read only the time value."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2509
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2510
    | peek |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2511
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2512
    hour := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2513
    (hour between: 0 and: 24) ifFalse: [self malformed: 'Bad hour: ' , hour printString].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2514
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2515
    peek := stream peekOrNil.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2516
    peek = $:
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2517
        ifTrue: [stream next]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2518
        ifFalse: [(peek notNil and: [peek isDigit]) ifFalse: [^self]].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2519
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2520
    minute := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2521
    (minute between: 0 and: 59) ifFalse: [self malformed: 'Bad minute: ' , minute printString].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2522
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2523
    peek := stream peekOrNil.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2524
    peek = $:
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2525
        ifTrue: [stream next]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2526
        ifFalse: [(peek notNil and: [peek isDigit]) ifFalse: [^self]].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2527
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2528
    second := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2529
    (second between: 0 and: 59) ifFalse: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2530
        "Seconds are usually in this range, do a special check for leap seconds."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2531
        second <= 61
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2532
            ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2533
                "Leap seconds can occur only on midnight on 31.12. or 30.6. Dont' check year
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2534
                as it's not deterministic."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2535
                (minute = 59 and: [hour = 23 and: [(month = 12 and: [day = 31]) or: [month = 6 and: [day = 30]]]])
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2536
                    ifFalse: [self malformed: 'Bad leap second']]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2537
            ifFalse: [self malformed: 'Bad second: ' , second printString]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2538
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2539
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2540
    "Hour, minute and second read. Read appendices."
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2541
    stream peekOrNil = $.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2542
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2543
            "Read dot. Skip it and read milliseconds."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2544
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2545
            self readMilliseconds].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2546
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2547
    hour = 24 ifTrue: [
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2548
        (minute = 0 and: [second = 0 and: [millisecond = 0]])
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2549
            ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2550
                "On 24 hour, advance to the next day."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2551
                "hour := 0.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2552
                self addMinutes: 1440"]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2553
            ifFalse: [self malformed: 'Bad 24 hour (minutes, seconds and millis not 0)']
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2554
    ]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2555
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2556
    "Created: / 14-06-2005 / 17:27:00 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2557
    "Modified: / 30-06-2005 / 11:34:38 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2558
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2559
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2560
readTimezone
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2561
    "Read time zone information. There are three possibilities of what can occur.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2562
    If there is nothing more to read, the offset is unknown - this is treated as
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2563
    Zulu time as this may not be true."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2564
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2565
    | peek |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2566
    peek := stream peek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2567
    peek ifNil: [^self].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2568
    peek := peek asUppercase.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2569
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2570
    "If the time is in Zulu, don't modify the timestamp. This makes the machine
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2571
    run in Zulu time zone, maybe some corrections would be nice."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2572
    peek = $Z
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2573
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2574
            "Time read, skip Zulu signature and exit."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2575
            isUtcTime := true.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2576
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2577
            ^ self].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2578
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2579
    peek = $+
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2580
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2581
            "Read a plus, expect a negative time zone difference."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2582
            isUtcTime := true.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2583
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2584
            self addHoursAndMinutes: (self readTimezoneOffset collect: [:e | e negated]).
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2585
            ^ self].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2586
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2587
    peek = $-
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2588
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2589
            "Read a minus, expect positive time zone difference or unknown offset."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2590
            isUtcTime := true.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2591
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2592
            self addHoursAndMinutes: self readTimezoneOffset.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2593
            ^ self].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2594
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2595
    "This is local time"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2596
    isUtcTime := false.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2597
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2598
    "Created: / 16-06-2005 / 09:54:21 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2599
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2600
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2601
readTimezoneOffset
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2602
    "Read time zone offset as a number minutes. Generally, there should be hours only
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2603
    but as the format introduces minutes in offsets, we must accept them."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2604
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2605
    | hours digit |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2606
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2607
    "Read hours."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2608
    hours := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2609
    (hours between: 0 and: 12) ifFalse: [self malformed: 'Bad offset hour: ' , hours printString].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2610
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2611
    stream peekOrNil = $:
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2612
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2613
            "Colon read, minutes must follow."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2614
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2615
            digit := self nextDigits: 2.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2616
            (digit between: 0 and: 59) ifFalse: [self malformed: 'Bad offset minute: ' , digit printString].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2617
            ^Array with: hours with: digit].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2618
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2619
    "Read next digit and check whether minutes follow. If not, return only with hours. If yes,
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2620
     check boundaries."
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2621
    digit := self nextDigit.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2622
    digit < 0 ifTrue: [^Array with: hours with: 0].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2623
    digit >= 6 ifTrue: [self malformed: 'Bad offset minute: ' , (digit * 10) printString].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2624
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2625
    "Read the last digit of offset, it must be present."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2626
    ^Array with: hours with: digit * 10 + self nextDigitOrError
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2627
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2628
    "Created: / 15-06-2005 / 15:35:41 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2629
    "Modified: / 15-06-2005 / 17:45:58 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2630
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2631
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2632
readWeekNumber
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2633
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2634
    | week day digit |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2635
    "Read week number. It is always two digits long."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2636
    week := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2637
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2638
    stream peekOrNil = $-
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2639
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2640
            "Got dash, day number must follow."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2641
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2642
            digit := self nextDigit.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2643
            digit < 0 ifTrue: [self malformed: 'Bad weekday number'].
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2644
            self dateFromWeek: week andWeekday: digit.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2645
            ^self].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2646
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2647
    "Read day number that follows the week. If the number is not given, consider it monday."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2648
    day := self nextDigit.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2649
    day <= 0 ifTrue: [day := 1].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2650
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2651
    self dateFromWeek: week andWeekday: day
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2652
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2653
    "Created: / 14-06-2005 / 12:06:47 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2654
    "Modified: / 15-06-2005 / 15:53:34 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2655
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2656
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2657
readYear
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2658
    "Read YYYY or :Y (broken decade) from the stream. Also handles correctly YY- and YYY-."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2659
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2660
    | read peek |
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2661
    stream peekOrNil = $:
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2662
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2663
            "Broken two digit year > 1999 follows."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2664
            stream next.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2665
            year := self nextDigitOrError + 2000.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2666
            ^self].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2667
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2668
    "Expecting two-, three- or four-digit year"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2669
    "Read the first two digits. They must be there."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2670
    read := self nextDigits: 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2671
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2672
    "Check if there's a dash, this can help us deciding whether the year ends."
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2673
    peek := stream peekOrNil.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2674
    peek ifNil: [^self].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2675
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2676
    year := peek = $-
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2677
        ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2678
            "OK, got two digits. These are expected to be the year after 1970."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2679
            read < 70
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2680
                ifTrue: [read + 2000]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2681
                ifFalse: [read + 1900]]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2682
        ifFalse: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2683
            "Read the next digit for the case of three-digit year after 1900 (ie. year > 1999)."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2684
             read := read * 10 + self nextDigitOrError.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2685
             peek := stream peekOrNil.
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2686
             (peek isNil or: [peek = $-])
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2687
                ifTrue: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2688
                    "Read three digit year, return it."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2689
                    read + 1900]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2690
                ifFalse: [
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2691
                    "Read the fourth digit of the year. These can be month digits but the
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2692
                    two-digit year format is deprecated anyway."
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2693
                    read := read * 10 + self nextDigitOrError]
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
  2694
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2695
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2696
    "Created: / 14-06-2005 / 12:01:11 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2697
    "Modified: / 15-06-2005 / 17:31:56 / masca"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2698
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2699
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  2700
!Timestamp class methodsFor:'documentation'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2701
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2702
version
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  2703
    ^ '$Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.142 2012/10/24 22:42:11 cg Exp $'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2704
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2705
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2706
version_CVS
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  2707
    ^ '§Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.142 2012/10/24 22:42:11 cg Exp §'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17862
diff changeset
  2708
!
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17862
diff changeset
  2709
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17862
diff changeset
  2710
version_SVN
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  2711
    ^ '$Id: Timestamp.st 10858 2012-10-29 22:07:56Z vranyj1 $'
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2712
! !
8246
7b66fe46e2c3 defined source container
Stefan Vogel <sv@exept.de>
parents: 8223
diff changeset
  2713
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
  2714
Timestamp initialize!
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
  2715
17910
8d796ca8bd1d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
  2716
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
  2717