date-constructor 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1097 @@
1
+ require 'test/unit'
2
+ require 'date'
3
+
4
+ class TestDateParse < Test::Unit::TestCase
5
+
6
+ def test__parse
7
+ [
8
+ # ctime(3), asctime(3)
9
+ [['Sat Aug 28 02:55:50 1999',false],[1999,8,28,2,55,50,nil,nil,6]],
10
+ [['Sat Aug 28 02:55:50 02',false],[2,8,28,2,55,50,nil,nil,6]],
11
+ [['Sat Aug 28 02:55:50 02',true],[2002,8,28,2,55,50,nil,nil,6]],
12
+ [['Sat Aug 28 02:55:50 0002',false],[2,8,28,2,55,50,nil,nil,6]],
13
+ [['Sat Aug 28 02:55:50 0002',true],[2,8,28,2,55,50,nil,nil,6]],
14
+
15
+ # date(1)
16
+ [['Sat Aug 28 02:29:34 JST 1999',false],[1999,8,28,2,29,34,'JST',9*3600,6]],
17
+ [['Sat Aug 28 02:29:34 MET DST 1999',false],[1999,8,28,2,29,34,'MET DST',2*3600,6]],
18
+ [['Sat Aug 28 02:29:34 AMT 1999',false],[1999,8,28,2,29,34,'AMT',nil,6]],
19
+ [['Sat Aug 28 02:29:34 PMT 1999',false],[1999,8,28,2,29,34,'PMT',nil,6]],
20
+ [['Sat Aug 28 02:29:34 PMT -1999',false],[-1999,8,28,2,29,34,'PMT',nil,6]],
21
+
22
+ [['Sat Aug 28 02:29:34 JST 02',false],[2,8,28,2,29,34,'JST',9*3600,6]],
23
+ [['Sat Aug 28 02:29:34 JST 02',true],[2002,8,28,2,29,34,'JST',9*3600,6]],
24
+ [['Sat Aug 28 02:29:34 JST 0002',false],[2,8,28,2,29,34,'JST',9*3600,6]],
25
+ [['Sat Aug 28 02:29:34 JST 0002',true],[2,8,28,2,29,34,'JST',9*3600,6]],
26
+
27
+ [['Sat Aug 28 02:29:34 GMT+09 0002',false],[2,8,28,2,29,34,'GMT+09',9*3600,6]],
28
+ [['Sat Aug 28 02:29:34 GMT+0900 0002',false],[2,8,28,2,29,34,'GMT+0900',9*3600,6]],
29
+ [['Sat Aug 28 02:29:34 GMT+09:00 0002',false],[2,8,28,2,29,34,'GMT+09:00',9*3600,6]],
30
+ [['Sat Aug 28 02:29:34 GMT-09 0002',false],[2,8,28,2,29,34,'GMT-09',-9*3600,6]],
31
+ [['Sat Aug 28 02:29:34 GMT-0900 0002',false],[2,8,28,2,29,34,'GMT-0900',-9*3600,6]],
32
+ [['Sat Aug 28 02:29:34 GMT-09:00 0002',false],[2,8,28,2,29,34,'GMT-09:00',-9*3600,6]],
33
+ [['Sat Aug 28 02:29:34 GMT-090102 0002',false],[2,8,28,2,29,34,'GMT-090102',-9*3600-60-2,6]],
34
+ [['Sat Aug 28 02:29:34 GMT-09:01:02 0002',false],[2,8,28,2,29,34,'GMT-09:01:02',-9*3600-60-2,6]],
35
+
36
+ [['Sat Aug 28 02:29:34 GMT Standard Time 2000',false],[2000,8,28,2,29,34,'GMT Standard Time',0*3600,6]],
37
+ [['Sat Aug 28 02:29:34 Mountain Standard Time 2000',false],[2000,8,28,2,29,34,'Mountain Standard Time',-7*3600,6]],
38
+ [['Sat Aug 28 02:29:34 Mountain Daylight Time 2000',false],[2000,8,28,2,29,34,'Mountain Daylight Time',-6*3600,6]],
39
+ [['Sat Aug 28 02:29:34 Mexico Standard Time 2000',false],[2000,8,28,2,29,34,'Mexico Standard Time',-6*3600,6]],
40
+ # [['Sat Aug 28 02:29:34 Mexico Standard Time 2 2000',false],[2000,8,28,2,29,34,'Mexico Standard Time 2',-7*3600,6]], # cp
41
+ [['Sat Aug 28 02:29:34 E. Australia Standard Time 2000',false],[2000,8,28,2,29,34,'E. Australia Standard Time',10*3600,6]],
42
+
43
+ # part of iso 8601
44
+ [['1999-05-23 23:55:21',false],[1999,5,23,23,55,21,nil,nil,nil]],
45
+ [['1999-05-23 23:55:21+0900',false],[1999,5,23,23,55,21,'+0900',9*3600,nil]],
46
+ [['1999-05-23 23:55:21-0900',false],[1999,5,23,23,55,21,'-0900',-9*3600,nil]],
47
+ [['1999-05-23 23:55:21+09:00',false],[1999,5,23,23,55,21,'+09:00',9*3600,nil]],
48
+ [['1999-05-23T23:55:21-09:00',false],[1999,5,23,23,55,21,'-09:00',-9*3600,nil]],
49
+ [['1999-05-23 23:55:21Z',false],[1999,5,23,23,55,21,'Z',0,nil]],
50
+ [['1999-05-23T23:55:21Z',false],[1999,5,23,23,55,21,'Z',0,nil]],
51
+ [['-1999-05-23T23:55:21Z',false],[-1999,5,23,23,55,21,'Z',0,nil]],
52
+ [['-1999-05-23T23:55:21Z',true],[-1999,5,23,23,55,21,'Z',0,nil]],
53
+ [['19990523T23:55:21Z',false],[1999,5,23,23,55,21,'Z',0,nil]],
54
+
55
+ [['+011985-04-12',false],[11985,4,12,nil,nil,nil,nil,nil,nil]],
56
+ [['+011985-04-12T10:15:30',false],[11985,4,12,10,15,30,nil,nil,nil]],
57
+ [['-011985-04-12',false],[-11985,4,12,nil,nil,nil,nil,nil,nil]],
58
+ [['-011985-04-12T10:15:30',false],[-11985,4,12,10,15,30,nil,nil,nil]],
59
+
60
+ [['02-04-12',false],[2,4,12,nil,nil,nil,nil,nil,nil]],
61
+ [['02-04-12',true],[2002,4,12,nil,nil,nil,nil,nil,nil]],
62
+ [['0002-04-12',false],[2,4,12,nil,nil,nil,nil,nil,nil]],
63
+ [['0002-04-12',true],[2,4,12,nil,nil,nil,nil,nil,nil]],
64
+
65
+ [['19990523',true],[1999,5,23,nil,nil,nil,nil,nil,nil]],
66
+ [['-19990523',true],[-1999,5,23,nil,nil,nil,nil,nil,nil]],
67
+ [['990523',true],[1999,5,23,nil,nil,nil,nil,nil,nil]],
68
+ [['0523',false],[nil,5,23,nil,nil,nil,nil,nil,nil]],
69
+ [['23',false],[nil,nil,23,nil,nil,nil,nil,nil,nil]],
70
+
71
+ [['19990523 235521',true],[1999,5,23,23,55,21,nil,nil,nil]],
72
+ [['990523 235521',true],[1999,5,23,23,55,21,nil,nil,nil]],
73
+ [['0523 2355',false],[nil,5,23,23,55,nil,nil,nil,nil]],
74
+ [['23 2355',false],[nil,nil,23,23,55,nil,nil,nil,nil]],
75
+
76
+ [['19990523T235521',true],[1999,5,23,23,55,21,nil,nil,nil]],
77
+ [['990523T235521',true],[1999,5,23,23,55,21,nil,nil,nil]],
78
+ [['19990523T235521.99',true],[1999,5,23,23,55,21,nil,nil,nil]],
79
+ [['990523T235521.99',true],[1999,5,23,23,55,21,nil,nil,nil]],
80
+ [['0523T2355',false],[nil,5,23,23,55,nil,nil,nil,nil]],
81
+
82
+ [['19990523T235521+0900',true],[1999,5,23,23,55,21,'+0900',9*3600,nil]],
83
+ [['990523T235521-0900',true],[1999,5,23,23,55,21,'-0900',-9*3600,nil]],
84
+ [['19990523T235521.99+0900',true],[1999,5,23,23,55,21,'+0900',9*3600,nil]],
85
+ [['990523T235521.99-0900',true],[1999,5,23,23,55,21,'-0900',-9*3600,nil]],
86
+ [['0523T2355Z',false],[nil,5,23,23,55,nil,'Z',0,nil]],
87
+
88
+ [['19990523235521.123456+0900',true],[1999,5,23,23,55,21,'+0900',9*3600,nil]],
89
+ [['19990523235521.123456-0900',true],[1999,5,23,23,55,21,'-0900',-9*3600,nil]],
90
+ [['19990523235521,123456+0900',true],[1999,5,23,23,55,21,'+0900',9*3600,nil]],
91
+ [['19990523235521,123456-0900',true],[1999,5,23,23,55,21,'-0900',-9*3600,nil]],
92
+
93
+ [['990523235521,123456-0900',false],[99,5,23,23,55,21,'-0900',-9*3600,nil]],
94
+ [['0523235521,123456-0900',false],[nil,5,23,23,55,21,'-0900',-9*3600,nil]],
95
+ [['23235521,123456-0900',false],[nil,nil,23,23,55,21,'-0900',-9*3600,nil]],
96
+ [['235521,123456-0900',false],[nil,nil,nil,23,55,21,'-0900',-9*3600,nil]],
97
+ [['5521,123456-0900',false],[nil,nil,nil,nil,55,21,'-0900',-9*3600,nil]],
98
+ [['21,123456-0900',false],[nil,nil,nil,nil,nil,21,'-0900',-9*3600,nil]],
99
+
100
+ [['3235521,123456-0900',false],[nil,nil,3,23,55,21,'-0900',-9*3600,nil]],
101
+ [['35521,123456-0900',false],[nil,nil,nil,3,55,21,'-0900',-9*3600,nil]],
102
+ [['521,123456-0900',false],[nil,nil,nil,nil,5,21,'-0900',-9*3600,nil]],
103
+
104
+ # reversed iso 8601 (?)
105
+ [['23-05-1999',false],[1999,5,23,nil,nil,nil,nil,nil,nil]],
106
+ [['23-05-1999 23:55:21',false],[1999,5,23,23,55,21,nil,nil,nil]],
107
+ [['23-05--1999 23:55:21',false],[-1999,5,23,23,55,21,nil,nil,nil]],
108
+ [["23-05-'99",false],[99,5,23,nil,nil,nil,nil,nil,nil]],
109
+ [["23-05-'99",true],[1999,5,23,nil,nil,nil,nil,nil,nil]],
110
+
111
+ # broken iso 8601 (?)
112
+ # [['1999-05-23T235521Z',false],[1999,5,23,23,55,21,'Z',0,nil]], # cp
113
+ [['19990523T23:55:21Z',false],[1999,5,23,23,55,21,'Z',0,nil]],
114
+ [['19990523235521.1234-100',true],[1999,5,23,23,55,21,'-100',-1*3600,nil]],
115
+ [['19990523235521.1234-10',true],[1999,5,23,23,55,21,'-10',-10*3600,nil]],
116
+
117
+ # part of jis x0301
118
+ [['M11.05.23',false],[1878,5,23,nil,nil,nil,nil,nil,nil]],
119
+ [['T11.05.23 23:55:21+0900',false],[1922,5,23,23,55,21,'+0900',9*3600,nil]],
120
+ [['S11.05.23 23:55:21-0900',false],[1936,5,23,23,55,21,'-0900',-9*3600,nil]],
121
+ [['S40.05.23 23:55:21+09:00',false],[1965,5,23,23,55,21,'+09:00',9*3600,nil]],
122
+ [['S40.05.23T23:55:21-09:00',false],[1965,5,23,23,55,21,'-09:00',-9*3600,nil]],
123
+ [['H11.05.23 23:55:21Z',false],[1999,5,23,23,55,21,'Z',0,nil]],
124
+ [['H11.05.23T23:55:21Z',false],[1999,5,23,23,55,21,'Z',0,nil]],
125
+
126
+ # ofx date
127
+ [['19990523235521',false],[1999,5,23,23,55,21,nil,nil,nil]],
128
+ [['19990523235521.123',false],[1999,5,23,23,55,21,nil,nil,nil]],
129
+ [['19990523235521.123[-9]',false],[1999,5,23,23,55,21,'-9',-(9*3600),nil]],
130
+ [['19990523235521.123[+9]',false],[1999,5,23,23,55,21,'+9',+(9*3600),nil]],
131
+ [['19990523235521.123[9]',false],[1999,5,23,23,55,21,'9',+(9*3600),nil]],
132
+ [['19990523235521.123[-9.50]',false],[1999,5,23,23,55,21,'-9.50',-(9*3600+30*60),nil]],
133
+ [['19990523235521.123[+9.50]',false],[1999,5,23,23,55,21,'+9.50',+(9*3600+30*60),nil]],
134
+ [['19990523235521.123[-5:EST]',false],[1999,5,23,23,55,21,'EST',-5*3600,nil]],
135
+ [['19990523235521.123[+9:JST]',false],[1999,5,23,23,55,21,'JST',9*3600,nil]],
136
+ [['19990523235521.123[+12:XXX YYY ZZZ]',false],[1999,5,23,23,55,21,'XXX YYY ZZZ',12*3600,nil]],
137
+ # [['235521',false],[nil,nil,nil,23,55,21,nil,nil,nil]], # cp
138
+ [['235521.123',false],[nil,nil,nil,23,55,21,nil,nil,nil]],
139
+ [['235521.123[-9]',false],[nil,nil,nil,23,55,21,'-9',-9*3600,nil]],
140
+ [['235521.123[+9]',false],[nil,nil,nil,23,55,21,'+9',+9*3600,nil]],
141
+ [['235521.123[-5:EST]',false],[nil,nil,nil,23,55,21,'EST',-5*3600,nil]],
142
+ [['235521.123[+9:JST]',false],[nil,nil,nil,23,55,21,'JST',+9*3600,nil]],
143
+
144
+ # rfc 2822
145
+ [['Sun, 22 Aug 1999 00:45:29 -0400',false],[1999,8,22,0,45,29,'-0400',-4*3600,0]],
146
+ [['Sun, 22 Aug 1999 00:45:29 -9959',false],[1999,8,22,0,45,29,'-9959',-(99*3600+59*60),0]],
147
+ [['Sun, 22 Aug 1999 00:45:29 +9959',false],[1999,8,22,0,45,29,'+9959',+(99*3600+59*60),0]],
148
+ [['Sun, 22 Aug 05 00:45:29 -0400',true],[2005,8,22,0,45,29,'-0400',-4*3600,0]],
149
+ [['Sun, 22 Aug 49 00:45:29 -0400',true],[2049,8,22,0,45,29,'-0400',-4*3600,0]],
150
+ # [['Sun, 22 Aug 50 00:45:29 -0400',true],[1950,8,22,0,45,29,'-0400',-4*3600,0]],
151
+ # [['Sun, 22 Aug 111 00:45:29 -0400',true],[2011,8,22,0,45,29,'-0400',-4*3600,0]],
152
+ [['Sun, 22 Aug 1999 00:45:29 GMT',false],[1999,8,22,0,45,29,'GMT',0,0]],
153
+ [["Sun,\00022\r\nAug\r\n1999\r\n00:45:29\r\nGMT",false],[1999,8,22,0,45,29,'GMT',0,0]],
154
+ [['Sun, 22 Aug 1999 00:45 GMT',false],[1999,8,22,0,45,nil,'GMT',0,0]],
155
+ [['Sun, 22 Aug -1999 00:45 GMT',false],[-1999,8,22,0,45,nil,'GMT',0,0]],
156
+ [['Sun, 22 Aug 99 00:45:29 UT',true],[1999,8,22,0,45,29,'UT',0,0]],
157
+ [['Sun, 22 Aug 0099 00:45:29 UT',true],[99,8,22,0,45,29,'UT',0,0]],
158
+
159
+ # rfc 850, obsoleted by rfc 1036
160
+ [['Tuesday, 02-Mar-99 11:20:32 GMT',true],[1999,3,2,11,20,32,'GMT',0,2]],
161
+
162
+ # W3C Working Draft - XForms - 4.8 Time
163
+ [['2000-01-31 13:20:00-5',false],[2000,1,31,13,20,0,'-5',-5*3600,nil]],
164
+
165
+ # [-+]\d+.\d+
166
+ [['2000-01-31 13:20:00-5.5',false],[2000,1,31,13,20,0,'-5.5',-5*3600-30*60,nil]],
167
+ [['2000-01-31 13:20:00-5,5',false],[2000,1,31,13,20,0,'-5,5',-5*3600-30*60,nil]],
168
+ [['2000-01-31 13:20:00+3.5',false],[2000,1,31,13,20,0,'+3.5',3*3600+30*60,nil]],
169
+ [['2000-01-31 13:20:00+3,5',false],[2000,1,31,13,20,0,'+3,5',3*3600+30*60,nil]],
170
+
171
+ # mil
172
+ [['2000-01-31 13:20:00 Z',false],[2000,1,31,13,20,0,'Z',0*3600,nil]],
173
+ [['2000-01-31 13:20:00 H',false],[2000,1,31,13,20,0,'H',8*3600,nil]],
174
+ [['2000-01-31 13:20:00 M',false],[2000,1,31,13,20,0,'M',12*3600,nil]],
175
+ [['2000-01-31 13:20 M',false],[2000,1,31,13,20,nil,'M',12*3600,nil]],
176
+ [['2000-01-31 13:20:00 S',false],[2000,1,31,13,20,0,'S',-6*3600,nil]],
177
+ [['2000-01-31 13:20:00 A',false],[2000,1,31,13,20,0,'A',1*3600,nil]],
178
+ [['2000-01-31 13:20:00 P',false],[2000,1,31,13,20,0,'P',-3*3600,nil]],
179
+
180
+ # dot
181
+ [['1999.5.2',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
182
+ [['1999.05.02',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
183
+ [['-1999.05.02',false],[-1999,5,2,nil,nil,nil,nil,nil,nil]],
184
+ # [['05.02',false],[nil,5,2,nil,nil,nil,nil,nil,nil]], # not support
185
+ # [[' 5. 2',false],[nil,5,2,nil,nil,nil,nil,nil,nil]], # not support
186
+
187
+ [['0099.5.2',false],[99,5,2,nil,nil,nil,nil,nil,nil]],
188
+ [['0099.5.2',true],[99,5,2,nil,nil,nil,nil,nil,nil]],
189
+
190
+ [["'99.5.2",false],[99,5,2,nil,nil,nil,nil,nil,nil]],
191
+ [["'99.5.2",true],[1999,5,2,nil,nil,nil,nil,nil,nil]],
192
+
193
+ # reversed dot
194
+ [['2.5.1999',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
195
+ [['02.05.1999',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
196
+ [['02.05.-1999',false],[-1999,5,2,nil,nil,nil,nil,nil,nil]],
197
+
198
+ [['2.5.0099',false],[99,5,2,nil,nil,nil,nil,nil,nil]],
199
+ [['2.5.0099',true],[99,5,2,nil,nil,nil,nil,nil,nil]],
200
+
201
+ [["2.5.'99",false],[99,5,2,nil,nil,nil,nil,nil,nil]],
202
+ [["2.5.'99",true],[1999,5,2,nil,nil,nil,nil,nil,nil]],
203
+
204
+ # vms
205
+ [['08-DEC-1988',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
206
+ [['31-JAN-1999',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
207
+ [['31-JAN--1999',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
208
+
209
+ [['08-DEC-88',false],[88,12,8,nil,nil,nil,nil,nil,nil]],
210
+ [['08-DEC-88',true],[1988,12,8,nil,nil,nil,nil,nil,nil]],
211
+ [['08-DEC-0088',false],[88,12,8,nil,nil,nil,nil,nil,nil]],
212
+ [['08-DEC-0088',true],[88,12,8,nil,nil,nil,nil,nil,nil]],
213
+
214
+ # swaped vms
215
+ [['DEC-08-1988',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
216
+ [['JAN-31-1999',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
217
+ [['JAN-31--1999',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
218
+ [['JAN-1999',false],[1999,1,nil,nil,nil,nil,nil,nil,nil]],
219
+ [['JAN--1999',false],[-1999,1,nil,nil,nil,nil,nil,nil,nil]],
220
+
221
+ # reversed vms
222
+ [['1988-DEC-08',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
223
+ [['1999-JAN-31',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
224
+ [['-1999-JAN-31',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
225
+
226
+ [['0088-DEC-08',false],[88,12,8,nil,nil,nil,nil,nil,nil]],
227
+ [['0088-DEC-08',true],[88,12,8,nil,nil,nil,nil,nil,nil]],
228
+
229
+ [["'88/12/8",false],[88,12,8,nil,nil,nil,nil,nil,nil]],
230
+ [["'88/12/8",true],[1988,12,8,nil,nil,nil,nil,nil,nil]],
231
+
232
+ # non-spaced eu
233
+ [['08/dec/1988',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
234
+ [['31/jan/1999',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
235
+ [['31/jan/-1999',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
236
+ [['08.dec.1988',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
237
+ [['31.jan.1999',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
238
+ [['31.jan.-1999',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
239
+
240
+ # non-spaced us
241
+ [['dec/08/1988',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
242
+ [['jan/31/1999',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
243
+ [['jan/31/-1999',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
244
+ [['jan/31',false],[nil,1,31,nil,nil,nil,nil,nil,nil]],
245
+ [['jan/1988',false],[1988,1,nil,nil,nil,nil,nil,nil,nil]],
246
+ [['dec.08.1988',false],[1988,12,8,nil,nil,nil,nil,nil,nil]],
247
+ [['jan.31.1999',false],[1999,1,31,nil,nil,nil,nil,nil,nil]],
248
+ [['jan.31.-1999',false],[-1999,1,31,nil,nil,nil,nil,nil,nil]],
249
+ [['jan.31',false],[nil,1,31,nil,nil,nil,nil,nil,nil]],
250
+ [['jan.1988',false],[1988,1,nil,nil,nil,nil,nil,nil,nil]],
251
+
252
+ # month and day of month
253
+ [['Jan 1',false],[nil,1,1,nil,nil,nil,nil,nil,nil]],
254
+ [['Jul 11',false],[nil,7,11,nil,nil,nil,nil,nil,nil]],
255
+ [['July 11',false],[nil,7,11,nil,nil,nil,nil,nil,nil]],
256
+ [['Sept 23',false],[nil,9,23,nil,nil,nil,nil,nil,nil]],
257
+ [['Sep. 23',false],[nil,9,23,nil,nil,nil,nil,nil,nil]],
258
+ [['Sept. 23',false],[nil,9,23,nil,nil,nil,nil,nil,nil]],
259
+ [['September 23',false],[nil,9,23,nil,nil,nil,nil,nil,nil]],
260
+ [['October 1st',false],[nil,10,1,nil,nil,nil,nil,nil,nil]],
261
+ [['October 23rd',false],[nil,10,23,nil,nil,nil,nil,nil,nil]],
262
+ [['October 25th 1999',false],[1999,10,25,nil,nil,nil,nil,nil,nil]],
263
+ [['October 25th -1999',false],[-1999,10,25,nil,nil,nil,nil,nil,nil]],
264
+ [['october 25th 1999',false],[1999,10,25,nil,nil,nil,nil,nil,nil]],
265
+ [['OCTOBER 25th 1999',false],[1999,10,25,nil,nil,nil,nil,nil,nil]],
266
+ [['oCtoBer 25th 1999',false],[1999,10,25,nil,nil,nil,nil,nil,nil]],
267
+ [['aSep 23',false],[nil,nil,23,nil,nil,nil,nil,nil,nil]],
268
+
269
+ # month and year
270
+ [['Sept 1990',false],[1990,9,nil,nil,nil,nil,nil,nil,nil]],
271
+ [["Sept '90",false],[90,9,nil,nil,nil,nil,nil,nil,nil]],
272
+ [["Sept '90",true],[1990,9,nil,nil,nil,nil,nil,nil,nil]],
273
+ [['1990/09',false],[1990,9,nil,nil,nil,nil,nil,nil,nil]],
274
+ [['09/1990',false],[1990,9,nil,nil,nil,nil,nil,nil,nil]],
275
+ [["aSep '90",false],[90,nil,nil,nil,nil,nil,nil,nil,nil]],
276
+
277
+ # year
278
+ [["'90",false],[90,nil,nil,nil,nil,nil,nil,nil,nil]],
279
+ [["'90",true],[1990,nil,nil,nil,nil,nil,nil,nil,nil]],
280
+
281
+ # month
282
+ [['Jun',false],[nil,6,nil,nil,nil,nil,nil,nil,nil]],
283
+ [['June',false],[nil,6,nil,nil,nil,nil,nil,nil,nil]],
284
+ [['Sep',false],[nil,9,nil,nil,nil,nil,nil,nil,nil]],
285
+ [['Sept',false],[nil,9,nil,nil,nil,nil,nil,nil,nil]],
286
+ [['September',false],[nil,9,nil,nil,nil,nil,nil,nil,nil]],
287
+ [['aSep',false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
288
+
289
+ # day of month
290
+ [['1st',false],[nil,nil,1,nil,nil,nil,nil,nil,nil]],
291
+ [['2nd',false],[nil,nil,2,nil,nil,nil,nil,nil,nil]],
292
+ [['3rd',false],[nil,nil,3,nil,nil,nil,nil,nil,nil]],
293
+ [['4th',false],[nil,nil,4,nil,nil,nil,nil,nil,nil]],
294
+ [['29th',false],[nil,nil,29,nil,nil,nil,nil,nil,nil]],
295
+ [['31st',false],[nil,nil,31,nil,nil,nil,nil,nil,nil]],
296
+ [['1sta',false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
297
+
298
+ # era
299
+ [['Sat Aug 28 02:29:34 GMT CE 2000',false],[2000,8,28,2,29,34,'GMT',0,6]],
300
+ [['Sat Aug 28 02:29:34 GMT C.E. 2000',false],[2000,8,28,2,29,34,'GMT',0,6]],
301
+ [['Sat Aug 28 02:29:34 GMT BCE 2000',false],[-1999,8,28,2,29,34,'GMT',0,6]],
302
+ [['Sat Aug 28 02:29:34 GMT B.C.E. 2000',false],[-1999,8,28,2,29,34,'GMT',0,6]],
303
+ [['Sat Aug 28 02:29:34 GMT AD 2000',false],[2000,8,28,2,29,34,'GMT',0,6]],
304
+ [['Sat Aug 28 02:29:34 GMT A.D. 2000',false],[2000,8,28,2,29,34,'GMT',0,6]],
305
+ [['Sat Aug 28 02:29:34 GMT BC 2000',false],[-1999,8,28,2,29,34,'GMT',0,6]],
306
+ [['Sat Aug 28 02:29:34 GMT B.C. 2000',false],[-1999,8,28,2,29,34,'GMT',0,6]],
307
+ [['Sat Aug 28 02:29:34 GMT 2000 BC',false],[-1999,8,28,2,29,34,'GMT',0,6]],
308
+ [['Sat Aug 28 02:29:34 GMT 2000 BCE',false],[-1999,8,28,2,29,34,'GMT',0,6]],
309
+ [['Sat Aug 28 02:29:34 GMT 2000 B.C.',false],[-1999,8,28,2,29,34,'GMT',0,6]],
310
+ [['Sat Aug 28 02:29:34 GMT 2000 B.C.E.',false],[-1999,8,28,2,29,34,'GMT',0,6]],
311
+
312
+ # collection
313
+ # [['le ler juillet 1982',false],[1982,7,1,nil,nil,nil,nil,nil,nil]], # bih 1982
314
+ # [['30 June 1982 , 23h 59m 59s',false],[1982,6,30,23,59,59,nil,nil,nil]], # bih 1982
315
+ [['Tuesday, May 18, 1999 Published at 13:36 GMT 14:36 UK',false],[1999,5,18,13,36,nil,'GMT',0,2]], # bbc.co.uk
316
+ [['July 20, 2000 Web posted at: 3:37 p.m. EDT (1937 GMT)',false],[2000,7,20,15,37,nil,'EDT',-4*3600,nil]], # cnn.com
317
+ [['12:54 p.m. EDT, September 11, 2006',false],[2006,9,11,12,54,nil,'EDT',-4*3600,nil]], # cnn.com
318
+ [['February 04, 2001 at 10:59 AM PST',false],[2001,2,4,10,59,nil,'PST',-8*3600,nil]], # old amazon.com
319
+ [['Monday May 08, @01:55PM',false],[nil,5,8,13,55,nil,nil,nil,1]], # slashdot.org
320
+ [['06.June 2005',false],[2005,6,6,nil,nil,nil,nil,nil,nil]], # dhl.com
321
+
322
+ # etc.
323
+ [['8:00 pm lt',false],[nil,nil,nil,20,0,nil,'lt',nil,nil]],
324
+ [['4:00 AM, Jan. 12, 1990',false],[1990,1,12,4,0,nil,nil,nil,nil]],
325
+ [['Jan. 12 4:00 AM 1990',false],[1990,1,12,4,0,nil,nil,nil,nil]],
326
+ # [['Jan. 12 4:00 -1990',false],[-1990,1,12,4,0,nil,nil,nil,nil]], # cp
327
+ [['1990-01-12 04:00:00+00',false],[1990,1,12,4,0,0,'+00',0,nil]],
328
+ [['1990-01-11 20:00:00-08',false],[1990,1,11,20,0,0,'-08',-8*3600,nil]],
329
+ [['1990/01/12 04:00:00',false],[1990,1,12,4,0,0,nil,nil,nil]],
330
+ # [['Thu Jan 11 20:00:00 1990 LT',false], [1990,1,11,20,0,0,'LT',nil,4]], # cp
331
+ [['Thu Jan 11 20:00:00 PST 1990',false],[1990,1,11,20,0,0,'PST',-8*3600,4]],
332
+ [['Fri Jan 12 04:00:00 GMT 1990',false],[1990,1,12,4,0,0,'GMT',0,5]],
333
+ [['Thu, 11 Jan 1990 20:00:00 -0800',false],[1990,1,11,20,0,0,'-0800',-8*3600,4]],
334
+ [['12-January-1990, 04:00 WET',false],[1990,1,12,4,0,nil,'WET',0*3600,nil]],
335
+ [['jan 2 3 am +4 5',false],[5,1,2,3,nil,nil,'+4',4*3600,nil]],
336
+ [['jan 2 3 am +4 5',true],[2005,1,2,3,nil,nil,'+4',4*3600,nil]],
337
+ [['fri1feb3bc4pm+5',false],[-2,2,1,16,nil,nil,'+5',5*3600,5]],
338
+ [['fri1feb3bc4pm+5',true],[-2,2,1,16,nil,nil,'+5',5*3600,5]],
339
+ [['03 feb 1st',false],[03,2,1,nil,nil,nil,nil,nil,nil]],
340
+
341
+ # apostrophe
342
+ [["July 4, '79",true],[1979,7,4,nil,nil,nil,nil,nil,nil]],
343
+ [["4th July '79",true],[1979,7,4,nil,nil,nil,nil,nil,nil]],
344
+
345
+ # day of week
346
+ [['Sunday',false],[nil,nil,nil,nil,nil,nil,nil,nil,0]],
347
+ [['Mon',false],[nil,nil,nil,nil,nil,nil,nil,nil,1]],
348
+ [['Tue',false],[nil,nil,nil,nil,nil,nil,nil,nil,2]],
349
+ [['Wed',false],[nil,nil,nil,nil,nil,nil,nil,nil,3]],
350
+ [['Thurs',false],[nil,nil,nil,nil,nil,nil,nil,nil,4]],
351
+ [['Friday',false],[nil,nil,nil,nil,nil,nil,nil,nil,5]],
352
+ [['Sat.',false],[nil,nil,nil,nil,nil,nil,nil,nil,6]],
353
+ [['sat.',false],[nil,nil,nil,nil,nil,nil,nil,nil,6]],
354
+ [['SAT.',false],[nil,nil,nil,nil,nil,nil,nil,nil,6]],
355
+ [['sAt.',false],[nil,nil,nil,nil,nil,nil,nil,nil,6]],
356
+ # [['su',false],[nil,nil,nil,nil,nil,nil,nil,nil,0]],
357
+ # [['mo',false],[nil,nil,nil,nil,nil,nil,nil,nil,1]],
358
+
359
+ # time
360
+ [['09:55',false],[nil,nil,nil,9,55,nil,nil,nil,nil]],
361
+ [['09:55:30',false],[nil,nil,nil,9,55,30,nil,nil,nil]],
362
+ [['09:55:30am',false],[nil,nil,nil,9,55,30,nil,nil,nil]],
363
+ [['09:55:30pm',false],[nil,nil,nil,21,55,30,nil,nil,nil]],
364
+ [['09:55:30a.m.',false],[nil,nil,nil,9,55,30,nil,nil,nil]],
365
+ [['09:55:30p.m.',false],[nil,nil,nil,21,55,30,nil,nil,nil]],
366
+ [['09:55:30pm GMT',false],[nil,nil,nil,21,55,30,'GMT',0,nil]],
367
+ [['09:55:30p.m. GMT',false],[nil,nil,nil,21,55,30,'GMT',0,nil]],
368
+ [['09:55+0900',false],[nil,nil,nil,9,55,nil,'+0900',9*3600,nil]],
369
+ [['09 AM',false],[nil,nil,nil,9,nil,nil,nil,nil,nil]],
370
+ [['09am',false],[nil,nil,nil,9,nil,nil,nil,nil,nil]],
371
+ [['09 A.M.',false],[nil,nil,nil,9,nil,nil,nil,nil,nil]],
372
+ [['09 PM',false],[nil,nil,nil,21,nil,nil,nil,nil,nil]],
373
+ [['09pm',false],[nil,nil,nil,21,nil,nil,nil,nil,nil]],
374
+ [['09 P.M.',false],[nil,nil,nil,21,nil,nil,nil,nil,nil]],
375
+
376
+ [['9h22m23s',false],[nil,nil,nil,9,22,23,nil,nil,nil]],
377
+ [['9h 22m 23s',false],[nil,nil,nil,9,22,23,nil,nil,nil]],
378
+ [['9h22m',false],[nil,nil,nil,9,22,nil,nil,nil,nil]],
379
+ [['9h 22m',false],[nil,nil,nil,9,22,nil,nil,nil,nil]],
380
+ [['9h',false],[nil,nil,nil,9,nil,nil,nil,nil,nil]],
381
+ [['9h 22m 23s am',false],[nil,nil,nil,9,22,23,nil,nil,nil]],
382
+ [['9h 22m 23s pm',false],[nil,nil,nil,21,22,23,nil,nil,nil]],
383
+ [['9h 22m am',false],[nil,nil,nil,9,22,nil,nil,nil,nil]],
384
+ [['9h 22m pm',false],[nil,nil,nil,21,22,nil,nil,nil,nil]],
385
+ [['9h am',false],[nil,nil,nil,9,nil,nil,nil,nil,nil]],
386
+ [['9h pm',false],[nil,nil,nil,21,nil,nil,nil,nil,nil]],
387
+
388
+ [['00:00',false],[nil,nil,nil,0,0,nil,nil,nil,nil]],
389
+ [['01:00',false],[nil,nil,nil,1,0,nil,nil,nil,nil]],
390
+ [['11:00',false],[nil,nil,nil,11,0,nil,nil,nil,nil]],
391
+ [['12:00',false],[nil,nil,nil,12,0,nil,nil,nil,nil]],
392
+ [['13:00',false],[nil,nil,nil,13,0,nil,nil,nil,nil]],
393
+ [['23:00',false],[nil,nil,nil,23,0,nil,nil,nil,nil]],
394
+ [['24:00',false],[nil,nil,nil,24,0,nil,nil,nil,nil]],
395
+
396
+ [['00:00 AM',false],[nil,nil,nil,0,0,nil,nil,nil,nil]],
397
+ [['12:00 AM',false],[nil,nil,nil,0,0,nil,nil,nil,nil]],
398
+ [['01:00 AM',false],[nil,nil,nil,1,0,nil,nil,nil,nil]],
399
+ [['11:00 AM',false],[nil,nil,nil,11,0,nil,nil,nil,nil]],
400
+ [['00:00 PM',false],[nil,nil,nil,12,0,nil,nil,nil,nil]],
401
+ [['12:00 PM',false],[nil,nil,nil,12,0,nil,nil,nil,nil]],
402
+ [['01:00 PM',false],[nil,nil,nil,13,0,nil,nil,nil,nil]],
403
+ [['11:00 PM',false],[nil,nil,nil,23,0,nil,nil,nil,nil]],
404
+
405
+ # pick up the rest
406
+ [['2000-01-02 1',false],[2000,1,2,1,nil,nil,nil,nil,nil]],
407
+ [['2000-01-02 23',false],[2000,1,2,23,nil,nil,nil,nil,nil]],
408
+ [['2000-01-02 24',false],[2000,1,2,24,nil,nil,nil,nil,nil]],
409
+ [['1 03:04:05',false],[nil,nil,1,3,4,5,nil,nil,nil]],
410
+ [['02 03:04:05',false],[nil,nil,2,3,4,5,nil,nil,nil]],
411
+ [['31 03:04:05',false],[nil,nil,31,3,4,5,nil,nil,nil]],
412
+
413
+ # null, space
414
+ [['',false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
415
+ [["\s",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
416
+ [["\s" * 10, true],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
417
+ [["\t",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
418
+ [["\n",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
419
+ [["\v",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
420
+ [["\f",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
421
+ [["\r",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
422
+ [["\t\n\v\f\r\s",false],[nil,nil,nil,nil,nil,nil,nil,nil,nil]],
423
+ [["1999-05-23\t\n\v\f\r\s21:34:56",false],[1999,5,23,21,34,56,nil,nil,nil]],
424
+ [["1999-05-23\n\n\n\n\n\n21:34:56",false],[1999,5,23,21,34,56,nil,nil,nil]],
425
+ ].each do |x,y|
426
+ h = Date._parse(*x)
427
+ a = h.values_at(:year,:mon,:mday,:hour,:min,:sec,:zone,:offset,:wday)
428
+ if y[1] == -1
429
+ a[1] = -1
430
+ a[2] = h[:yday]
431
+ end
432
+ assert_equal(y, a, [x, y, a].inspect)
433
+ end
434
+ end
435
+
436
+ def test__parse_slash_exp
437
+ [
438
+ # little
439
+ [['2/5/1999',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
440
+ [['02/05/1999',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
441
+ [['02/05/-1999',false],[-1999,5,2,nil,nil,nil,nil,nil,nil]],
442
+ [['05/02',false],[nil,5,2,nil,nil,nil,nil,nil,nil]],
443
+ [[' 5/ 2',false],[nil,5,2,nil,nil,nil,nil,nil,nil]],
444
+
445
+ [["2/5/'99",true],[1999,5,2,nil,nil,nil,nil,nil,nil]],
446
+ [['2/5/0099',false],[99,5,2,nil,nil,nil,nil,nil,nil]],
447
+ [['2/5/0099',true],[99,5,2,nil,nil,nil,nil,nil,nil]],
448
+
449
+ [['2/5 1999',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
450
+ [['2/5-1999',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
451
+ [['2/5--1999',false],[-1999,5,2,nil,nil,nil,nil,nil,nil]],
452
+
453
+ # big
454
+ [['99/5/2',false],[99,5,2,nil,nil,nil,nil,nil,nil]],
455
+ [['99/5/2',true],[1999,5,2,nil,nil,nil,nil,nil,nil]],
456
+
457
+ [['1999/5/2',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
458
+ [['1999/05/02',false],[1999,5,2,nil,nil,nil,nil,nil,nil]],
459
+ [['-1999/05/02',false],[-1999,5,2,nil,nil,nil,nil,nil,nil]],
460
+
461
+ [['0099/5/2',false],[99,5,2,nil,nil,nil,nil,nil,nil]],
462
+ [['0099/5/2',true],[99,5,2,nil,nil,nil,nil,nil,nil]],
463
+
464
+ [["'99/5/2",false],[99,5,2,nil,nil,nil,nil,nil,nil]],
465
+ [["'99/5/2",true],[1999,5,2,nil,nil,nil,nil,nil,nil]],
466
+ ].each do |x,y|
467
+ h = Date._parse(*x)
468
+ a = h.values_at(:year,:mon,:mday,:hour,:min,:sec,:zone,:offset,:wday)
469
+ if y[1] == -1
470
+ a[1] = -1
471
+ a[2] = h[:yday]
472
+ end
473
+ assert_equal(y, a, [x, y, a].inspect)
474
+ end
475
+ end
476
+
477
+ def test__parse__2
478
+ h = Date._parse('22:45:59.5')
479
+ assert_equal([22, 45, 59, 5.to_r/10**1], h.values_at(:hour, :min, :sec, :sec_fraction))
480
+ h = Date._parse('22:45:59.05')
481
+ assert_equal([22, 45, 59, 5.to_r/10**2], h.values_at(:hour, :min, :sec, :sec_fraction))
482
+ h = Date._parse('22:45:59.005')
483
+ assert_equal([22, 45, 59, 5.to_r/10**3], h.values_at(:hour, :min, :sec, :sec_fraction))
484
+ h = Date._parse('22:45:59.0123')
485
+ assert_equal([22, 45, 59, 123.to_r/10**4], h.values_at(:hour, :min, :sec, :sec_fraction))
486
+
487
+ h = Date._parse('224559.5')
488
+ assert_equal([22, 45, 59, 5.to_r/10**1], h.values_at(:hour, :min, :sec, :sec_fraction))
489
+ h = Date._parse('224559.05')
490
+ assert_equal([22, 45, 59, 5.to_r/10**2], h.values_at(:hour, :min, :sec, :sec_fraction))
491
+ h = Date._parse('224559.005')
492
+ assert_equal([22, 45, 59, 5.to_r/10**3], h.values_at(:hour, :min, :sec, :sec_fraction))
493
+ h = Date._parse('224559.0123')
494
+ assert_equal([22, 45, 59, 123.to_r/10**4], h.values_at(:hour, :min, :sec, :sec_fraction))
495
+
496
+ h = Date._parse('2006-w15-5')
497
+ assert_equal([2006, 15, 5], h.values_at(:cwyear, :cweek, :cwday))
498
+ h = Date._parse('2006w155')
499
+ assert_equal([2006, 15, 5], h.values_at(:cwyear, :cweek, :cwday))
500
+ h = Date._parse('06w155', false)
501
+ assert_equal([6, 15, 5], h.values_at(:cwyear, :cweek, :cwday))
502
+ h = Date._parse('06w155', true)
503
+ assert_equal([2006, 15, 5], h.values_at(:cwyear, :cweek, :cwday))
504
+
505
+ h = Date._parse('2006-w15')
506
+ assert_equal([2006, 15, nil], h.values_at(:cwyear, :cweek, :cwday))
507
+ h = Date._parse('2006w15')
508
+ assert_equal([2006, 15, nil], h.values_at(:cwyear, :cweek, :cwday))
509
+
510
+ h = Date._parse('-w15-5')
511
+ assert_equal([nil, 15, 5], h.values_at(:cwyear, :cweek, :cwday))
512
+ h = Date._parse('-w155')
513
+ assert_equal([nil, 15, 5], h.values_at(:cwyear, :cweek, :cwday))
514
+
515
+ h = Date._parse('-w15')
516
+ assert_equal([nil, 15, nil], h.values_at(:cwyear, :cweek, :cwday))
517
+ h = Date._parse('-w15')
518
+ assert_equal([nil, 15, nil], h.values_at(:cwyear, :cweek, :cwday))
519
+
520
+ h = Date._parse('-w-5')
521
+ assert_equal([nil, nil, 5], h.values_at(:cwyear, :cweek, :cwday))
522
+
523
+ h = Date._parse('--11-29')
524
+ assert_equal([nil, 11, 29], h.values_at(:year, :mon, :mday))
525
+ h = Date._parse('--1129')
526
+ assert_equal([nil, 11, 29], h.values_at(:year, :mon, :mday))
527
+ h = Date._parse('--11')
528
+ assert_equal([nil, 11, nil], h.values_at(:year, :mon, :mday))
529
+ h = Date._parse('---29')
530
+ assert_equal([nil, nil, 29], h.values_at(:year, :mon, :mday))
531
+ h = Date._parse('-333')
532
+ assert_equal([nil, 333], h.values_at(:year, :yday))
533
+
534
+ h = Date._parse('2006-333')
535
+ assert_equal([2006, 333], h.values_at(:year, :yday))
536
+ h = Date._parse('2006333')
537
+ assert_equal([2006, 333], h.values_at(:year, :yday))
538
+ h = Date._parse('06333', false)
539
+ assert_equal([6, 333], h.values_at(:year, :yday))
540
+ h = Date._parse('06333', true)
541
+ assert_equal([2006, 333], h.values_at(:year, :yday))
542
+ h = Date._parse('333')
543
+ assert_equal([nil, 333], h.values_at(:year, :yday))
544
+ end
545
+
546
+ def test_parse
547
+ assert_equal(Date.new, Date.parse)
548
+ assert_equal(Date.new(2002,3,14), Date.parse('2002-03-14'))
549
+
550
+ assert_equal(DateTime.new(2002,3,14,11,22,33, 0),
551
+ DateTime.parse('2002-03-14T11:22:33Z'))
552
+ assert_equal(DateTime.new(2002,3,14,11,22,33, 9.to_r/24),
553
+ DateTime.parse('2002-03-14T11:22:33+09:00'))
554
+ assert_equal(DateTime.new(2002,3,14,11,22,33, -9.to_r/24),
555
+ DateTime.parse('2002-03-14T11:22:33-09:00'))
556
+ assert_equal(DateTime.new(2002,3,14,11,22,33, -9.to_r/24) + 123456789.to_r/1000000000/86400,
557
+ DateTime.parse('2002-03-14T11:22:33.123456789-09:00'))
558
+ end
559
+
560
+ def test_parse__2
561
+ d1 = DateTime.parse('2004-03-13T22:45:59.5')
562
+ d2 = DateTime.parse('2004-03-13T22:45:59')
563
+ assert_equal(d2 + 5.to_r/10**1/86400, d1)
564
+ d1 = DateTime.parse('2004-03-13T22:45:59.05')
565
+ d2 = DateTime.parse('2004-03-13T22:45:59')
566
+ assert_equal(d2 + 5.to_r/10**2/86400, d1)
567
+ d1 = DateTime.parse('2004-03-13T22:45:59.005')
568
+ d2 = DateTime.parse('2004-03-13T22:45:59')
569
+ assert_equal(d2 + 5.to_r/10**3/86400, d1)
570
+ d1 = DateTime.parse('2004-03-13T22:45:59.0123')
571
+ d2 = DateTime.parse('2004-03-13T22:45:59')
572
+ assert_equal(d2 + 123.to_r/10**4/86400, d1)
573
+ d1 = DateTime.parse('2004-03-13T22:45:59.5')
574
+ d1 += 1.to_r/2/86400
575
+ d2 = DateTime.parse('2004-03-13T22:46:00')
576
+ assert_equal(d2, d1)
577
+ end
578
+
579
+ require 'time'
580
+
581
+ def test_parse__time
582
+ methods = [:to_s, :asctime, :iso8601, :rfc2822, :httpdate, :xmlschema]
583
+
584
+ t = Time.utc(2001,2,3,4,5,6)
585
+ methods.each do |m|
586
+ d = DateTime.parse(t.__send__(m))
587
+ assert_equal([2001, 2, 3, 4, 5, 6],
588
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec],
589
+ [m, t.__send__(m)].inspect)
590
+ end
591
+
592
+ t = Time.mktime(2001,2,3,4,5,6)
593
+ methods.each do |m|
594
+ next if m == :httpdate
595
+ d = DateTime.parse(t.__send__(m))
596
+ assert_equal([2001, 2, 3, 4, 5, 6],
597
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec],
598
+ [m, t.__send__(m)].inspect)
599
+ end
600
+ end
601
+
602
+ def test_parse__comp
603
+ n = DateTime.now
604
+
605
+ d = DateTime.parse('073')
606
+ assert_equal([n.year, 73, 0, 0, 0],
607
+ [d.year, d.yday, d.hour, d.min, d.sec])
608
+ d = DateTime.parse('13')
609
+ assert_equal([n.year, n.mon, 13, 0, 0, 0],
610
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
611
+
612
+ d = DateTime.parse('Mar 13')
613
+ assert_equal([n.year, 3, 13, 0, 0, 0],
614
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
615
+ d = DateTime.parse('Mar 2004')
616
+ assert_equal([2004, 3, 1, 0, 0, 0],
617
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
618
+ d = DateTime.parse('23:55')
619
+ assert_equal([n.year, n.mon, n.mday, 23, 55, 0],
620
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
621
+ d = DateTime.parse('23:55:30')
622
+ assert_equal([n.year, n.mon, n.mday, 23, 55, 30],
623
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
624
+
625
+ d = DateTime.parse('Sun 23:55')
626
+ d2 = d - d.wday
627
+ assert_equal([d2.year, d2.mon, d2.mday, 23, 55, 0],
628
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
629
+ d = DateTime.parse('Aug 23:55')
630
+ assert_equal([n.year, 8, 1, 23, 55, 0],
631
+ [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
632
+ end
633
+
634
+ def test_parse__d_to_s
635
+ d = Date.new(2002,3,14)
636
+ assert_equal(d, Date.parse(d.to_s))
637
+
638
+ d = DateTime.new(2002,3,14,11,22,33, 9.to_r/24)
639
+ assert_equal(d, DateTime.parse(d.to_s))
640
+ end
641
+
642
+ def test_parse_utf8
643
+ h = DateTime._parse("Sun\u{3000}Aug 16 01:02:03 \u{65e5}\u{672c} 2009")
644
+ assert_equal(2009, h[:year])
645
+ assert_equal(8, h[:mon])
646
+ assert_equal(16, h[:mday])
647
+ assert_equal(0, h[:wday])
648
+ assert_equal(1, h[:hour])
649
+ assert_equal(2, h[:min])
650
+ assert_equal(3, h[:sec])
651
+ assert_equal("\u{65e5}\u{672c}", h[:zone])
652
+ end
653
+
654
+ def test_parse__ex
655
+ assert_raise(ArgumentError) do
656
+ Date.parse('')
657
+ end
658
+ assert_raise(ArgumentError) do
659
+ DateTime.parse('')
660
+ end
661
+ assert_raise(ArgumentError) do
662
+ Date.parse('2001-02-29')
663
+ end
664
+ assert_raise(ArgumentError) do
665
+ DateTime.parse('2001-02-29T23:59:60')
666
+ end
667
+ assert_raise(ArgumentError) do
668
+ Date.parse('23:55')
669
+ end
670
+ end
671
+
672
+ def test__iso8601
673
+ h = Date._iso8601('01-02-03T04:05:06Z')
674
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
675
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
676
+ h = Date._iso8601('2001-02-03T04:05:06Z')
677
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
678
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
679
+ h = Date._iso8601('--02-03T04:05:06Z')
680
+ assert_equal([nil, 2, 3, 4, 5, 6, 0],
681
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
682
+ h = Date._iso8601('---03T04:05:06Z')
683
+ assert_equal([nil, nil, 3, 4, 5, 6, 0],
684
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
685
+
686
+ h = Date._iso8601('2001-02-03T04:05')
687
+ assert_equal([2001, 2, 3, 4, 5, nil, nil],
688
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
689
+ h = Date._iso8601('2001-02-03T04:05:06')
690
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
691
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
692
+ h = Date._iso8601('2001-02-03T04:05:06,07')
693
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
694
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
695
+ h = Date._iso8601('2001-02-03T04:05:06Z')
696
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
697
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
698
+ h = Date._iso8601('2001-02-03T04:05:06.07+01:00')
699
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
700
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
701
+
702
+ h = Date._iso8601('010203T040506Z')
703
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
704
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
705
+ h = Date._iso8601('20010203T040506Z')
706
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
707
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
708
+ h = Date._iso8601('--0203T040506Z')
709
+ assert_equal([nil, 2, 3, 4, 5, 6, 0],
710
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
711
+ h = Date._iso8601('---03T040506Z')
712
+ assert_equal([nil, nil, 3, 4, 5, 6, 0],
713
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
714
+
715
+ h = Date._iso8601('010203T0405')
716
+ assert_equal([2001, 2, 3, 4, 5, nil, nil],
717
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
718
+ h = Date._iso8601('20010203T0405')
719
+ assert_equal([2001, 2, 3, 4, 5, nil, nil],
720
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
721
+ h = Date._iso8601('20010203T040506')
722
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
723
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
724
+ h = Date._iso8601('20010203T040506,07')
725
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
726
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
727
+ h = Date._iso8601('20010203T040506Z')
728
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
729
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
730
+ h = Date._iso8601('20010203T040506.07+0100')
731
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
732
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
733
+
734
+ h = Date._iso8601('200102030405')
735
+ assert_equal([2001, 2, 3, 4, 5, nil, nil],
736
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
737
+ h = Date._iso8601('20010203040506')
738
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
739
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
740
+ h = Date._iso8601('20010203040506,07')
741
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
742
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
743
+ h = Date._iso8601('20010203040506Z')
744
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
745
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
746
+ h = Date._iso8601('20010203040506.07+0100')
747
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
748
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
749
+
750
+ h = Date._iso8601('01-023T04:05:06Z')
751
+ assert_equal([2001, 23, 4, 5, 6, 0],
752
+ h.values_at(:year, :yday, :hour, :min, :sec, :offset))
753
+ h = Date._iso8601('2001-023T04:05:06Z')
754
+ assert_equal([2001, 23, 4, 5, 6, 0],
755
+ h.values_at(:year, :yday, :hour, :min, :sec, :offset))
756
+ h = Date._iso8601('-023T04:05:06Z')
757
+ assert_equal([nil, 23, 4, 5, 6, 0],
758
+ h.values_at(:year, :yday, :hour, :min, :sec, :offset))
759
+
760
+ h = Date._iso8601('01023T040506Z')
761
+ assert_equal([2001, 23, 4, 5, 6, 0],
762
+ h.values_at(:year, :yday, :hour, :min, :sec, :offset))
763
+ h = Date._iso8601('2001023T040506Z')
764
+ assert_equal([2001, 23, 4, 5, 6, 0],
765
+ h.values_at(:year, :yday, :hour, :min, :sec, :offset))
766
+ h = Date._iso8601('-023T040506Z')
767
+ assert_equal([nil, 23, 4, 5, 6, 0],
768
+ h.values_at(:year, :yday, :hour, :min, :sec, :offset))
769
+
770
+ h = Date._iso8601('01-w02-3T04:05:06Z')
771
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
772
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
773
+ h = Date._iso8601('2001-w02-3T04:05:06Z')
774
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
775
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
776
+ h = Date._iso8601('-w02-3T04:05:06Z')
777
+ assert_equal([nil, 2, 3, 4, 5, 6, 0],
778
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
779
+ h = Date._iso8601('-w-3T04:05:06Z')
780
+ assert_equal([nil, nil, 3, 4, 5, 6, 0],
781
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
782
+
783
+ h = Date._iso8601('01w023T040506Z')
784
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
785
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
786
+ h = Date._iso8601('2001w023T040506Z')
787
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
788
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
789
+ h = Date._iso8601('-w023T040506Z')
790
+ assert_equal([nil, 2, 3, 4, 5, 6, 0],
791
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
792
+ h = Date._iso8601('-w-3T040506Z')
793
+ assert_equal([nil, nil, 3, 4, 5, 6, 0],
794
+ h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset))
795
+
796
+ h = Date._iso8601('04:05')
797
+ assert_equal([nil, nil, nil, 4, 5, nil, nil],
798
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
799
+ h = Date._iso8601('04:05:06')
800
+ assert_equal([nil, nil, nil, 4, 5, 6, nil],
801
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
802
+ h = Date._iso8601('04:05:06,07')
803
+ assert_equal([nil, nil, nil, 4, 5, 6, nil],
804
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
805
+ h = Date._iso8601('04:05:06Z')
806
+ assert_equal([nil, nil, nil, 4, 5, 6, 0],
807
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
808
+ h = Date._iso8601('04:05:06.07+01:00')
809
+ assert_equal([nil, nil, nil, 4, 5, 6, 3600],
810
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
811
+
812
+ h = Date._iso8601('040506,07')
813
+ assert_equal([nil, nil, nil, 4, 5, 6, nil],
814
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
815
+ h = Date._iso8601('040506.07+0100')
816
+ assert_equal([nil, nil, nil, 4, 5, 6, 3600],
817
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
818
+
819
+ end
820
+
821
+ def test__rfc3339
822
+ h = Date._rfc3339('2001-02-03T04:05:06Z')
823
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
824
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
825
+ h = Date._rfc3339('2001-02-03 04:05:06Z')
826
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
827
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
828
+ h = Date._rfc3339('2001-02-03T04:05:06.07+01:00')
829
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
830
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
831
+ end
832
+
833
+ def test__xmlschema
834
+ h = Date._xmlschema('2001-02-03')
835
+ assert_equal([2001, 2, 3, nil, nil, nil, nil],
836
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
837
+ h = Date._xmlschema('2001-02-03Z')
838
+ assert_equal([2001, 2, 3, nil, nil, nil, 0],
839
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
840
+ h = Date._xmlschema('2001-02-03+01:00')
841
+ assert_equal([2001, 2, 3, nil, nil, nil, 3600],
842
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
843
+
844
+ h = Date._xmlschema('2001-02-03T04:05:06')
845
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
846
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
847
+ h = Date._xmlschema('2001-02-03T04:05:06.07')
848
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
849
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
850
+ h = Date._xmlschema('2001-02-03T04:05:06.07Z')
851
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
852
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
853
+ h = Date._xmlschema('2001-02-03T04:05:06.07+01:00')
854
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
855
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
856
+
857
+ h = Date._xmlschema('04:05:06')
858
+ assert_equal([nil, nil, nil, 4, 5, 6, nil],
859
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
860
+ h = Date._xmlschema('04:05:06Z')
861
+ assert_equal([nil, nil, nil, 4, 5, 6, 0],
862
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
863
+ h = Date._xmlschema('04:05:06+01:00')
864
+ assert_equal([nil, nil, nil, 4, 5, 6, 3600],
865
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
866
+
867
+ h = Date._xmlschema('2001-02')
868
+ assert_equal([2001, 2, nil, nil, nil, nil, nil],
869
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
870
+ h = Date._xmlschema('2001-02Z')
871
+ assert_equal([2001, 2, nil, nil, nil, nil, 0],
872
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
873
+ h = Date._xmlschema('2001-02+01:00')
874
+ assert_equal([2001, 2, nil, nil, nil, nil, 3600],
875
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
876
+ h = Date._xmlschema('2001-02-01:00')
877
+ assert_equal([2001, 2, nil, nil, nil, nil, -3600],
878
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
879
+
880
+ h = Date._xmlschema('2001')
881
+ assert_equal([2001, nil, nil, nil, nil, nil, nil],
882
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
883
+ h = Date._xmlschema('2001Z')
884
+ assert_equal([2001, nil, nil, nil, nil, nil, 0],
885
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
886
+ h = Date._xmlschema('2001+01:00')
887
+ assert_equal([2001, nil, nil, nil, nil, nil, 3600],
888
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
889
+ h = Date._xmlschema('2001-01:00')
890
+ assert_equal([2001, nil, nil, nil, nil, nil, -3600],
891
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
892
+
893
+ h = Date._xmlschema('--02')
894
+ assert_equal([nil, 2, nil, nil, nil, nil, nil],
895
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
896
+ h = Date._xmlschema('--02Z')
897
+ assert_equal([nil, 2, nil, nil, nil, nil, 0],
898
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
899
+ h = Date._xmlschema('--02+01:00')
900
+ assert_equal([nil, 2, nil, nil, nil, nil, 3600],
901
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
902
+
903
+ h = Date._xmlschema('92001-02-03T04:05:06.07+01:00')
904
+ assert_equal([92001, 2, 3, 4, 5, 6, 3600],
905
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
906
+
907
+ h = Date._xmlschema('-92001-02-03T04:05:06.07+01:00')
908
+ assert_equal([-92001, 2, 3, 4, 5, 6, 3600],
909
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
910
+ end
911
+
912
+ def test__rfc2822
913
+ h = Date._rfc2822('Sat, 3 Feb 2001 04:05:06 UT')
914
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
915
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
916
+ h = Date._rfc2822('Sat, 3 Feb 2001 04:05:06 EST')
917
+ assert_equal([2001, 2, 3, 4, 5, 6, -5*3600],
918
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
919
+ h = Date._rfc2822('Sat, 3 Feb 2001 04:05:06 +0000')
920
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
921
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
922
+ h = Date._rfc2822('Sat, 3 Feb 2001 04:05:06 +0100')
923
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
924
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
925
+
926
+ h = Date._rfc2822('Sat, 03 Feb 50 04:05:06 +0100')
927
+ assert_equal([1950, 2, 3, 4, 5, 6, 3600],
928
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
929
+ h = Date._rfc2822('Sat, 03 Feb 49 04:05:06 +0100')
930
+ assert_equal([2049, 2, 3, 4, 5, 6, 3600],
931
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
932
+ h = Date._rfc2822('Sat, 03 Feb 100 04:05:06 +0100')
933
+ assert_equal([2000, 2, 3, 4, 5, 6, 3600],
934
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
935
+
936
+ h1 = Date._rfc2822('Sat, 3 Feb 2001 04:05:06 UT')
937
+ h2 = Date._rfc822('Sat, 3 Feb 2001 04:05:06 UT')
938
+ assert_equal(h1, h2)
939
+ end
940
+
941
+ def test__httpdate
942
+ h = Date._httpdate('Sat, 03 Feb 2001 04:05:06 GMT')
943
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
944
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
945
+
946
+ h = Date._httpdate('Saturday, 03-Feb-01 04:05:06 GMT')
947
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
948
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
949
+
950
+ h = Date._httpdate('Sat Feb 3 04:05:06 2001')
951
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
952
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
953
+ h = Date._httpdate('Sat Feb 03 04:05:06 2001')
954
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
955
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
956
+ end
957
+
958
+ def test__jisx0301
959
+ h = Date._jisx0301('13.02.03')
960
+ assert_equal([2001, 2, 3, nil, nil, nil, nil],
961
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
962
+ h = Date._jisx0301('H13.02.03')
963
+ assert_equal([2001, 2, 3, nil, nil, nil, nil],
964
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
965
+ h = Date._jisx0301('S63.02.03')
966
+ assert_equal([1988, 2, 3, nil, nil, nil, nil],
967
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
968
+
969
+ h = Date._jisx0301('H13.02.03T04:05:06')
970
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
971
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
972
+ h = Date._jisx0301('H13.02.03T04:05:06,07')
973
+ assert_equal([2001, 2, 3, 4, 5, 6, nil],
974
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
975
+ h = Date._jisx0301('H13.02.03T04:05:06Z')
976
+ assert_equal([2001, 2, 3, 4, 5, 6, 0],
977
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
978
+ h = Date._jisx0301('H13.02.03T04:05:06.07+0100')
979
+ assert_equal([2001, 2, 3, 4, 5, 6, 3600],
980
+ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset))
981
+ end
982
+
983
+ def test_iso8601
984
+ assert_instance_of(Date, Date.iso8601)
985
+ assert_instance_of(DateTime, DateTime.iso8601)
986
+
987
+ d = Date.iso8601('2001-02-03', Date::ITALY + 10)
988
+ assert_equal(Date.new(2001,2,3), d)
989
+ assert_equal(Date::ITALY + 10, d.start)
990
+
991
+ d = DateTime.iso8601('2001-02-03T04:05:06+07:00', Date::ITALY + 10)
992
+ assert_equal(DateTime.new(2001,2,3,4,5,6,'+07:00'), d)
993
+ assert_equal(Date::ITALY + 10, d.start)
994
+ end
995
+
996
+ def test_rfc3339
997
+ assert_instance_of(Date, Date.rfc3339)
998
+ assert_instance_of(DateTime, DateTime.rfc3339)
999
+
1000
+ d = Date.rfc3339('2001-02-03T04:05:06+07:00', Date::ITALY + 10)
1001
+ assert_equal(Date.new(2001,2,3), d)
1002
+ assert_equal(Date::ITALY + 10, d.start)
1003
+
1004
+ d = DateTime.rfc3339('2001-02-03T04:05:06+07:00', Date::ITALY + 10)
1005
+ assert_equal(DateTime.new(2001,2,3,4,5,6,'+07:00'), d)
1006
+ assert_equal(Date::ITALY + 10, d.start)
1007
+ end
1008
+
1009
+ def test_xmlschema
1010
+ assert_instance_of(Date, Date.xmlschema)
1011
+ assert_instance_of(DateTime, DateTime.xmlschema)
1012
+
1013
+ d = Date.xmlschema('2001-02-03', Date::ITALY + 10)
1014
+ assert_equal(Date.new(2001,2,3), d)
1015
+ assert_equal(Date::ITALY + 10, d.start)
1016
+
1017
+ d = DateTime.xmlschema('2001-02-03T04:05:06+07:00', Date::ITALY + 10)
1018
+ assert_equal(DateTime.new(2001,2,3,4,5,6,'+07:00'), d)
1019
+ assert_equal(Date::ITALY + 10, d.start)
1020
+ end
1021
+
1022
+ def test_rfc2822
1023
+ assert_instance_of(Date, Date.rfc2822)
1024
+ assert_instance_of(DateTime, DateTime.rfc2822)
1025
+ assert_instance_of(Date, Date.rfc822)
1026
+ assert_instance_of(DateTime, DateTime.rfc822)
1027
+
1028
+ d = Date.rfc2822('Sat, 3 Feb 2001 04:05:06 +0700', Date::ITALY + 10)
1029
+ assert_equal(Date.new(2001,2,3), d)
1030
+ assert_equal(Date::ITALY + 10, d.start)
1031
+
1032
+ d = DateTime.rfc2822('Sat, 3 Feb 2001 04:05:06 +0700', Date::ITALY + 10)
1033
+ assert_equal(DateTime.new(2001,2,3,4,5,6,'+07:00'), d)
1034
+ assert_equal(Date::ITALY + 10, d.start)
1035
+ end
1036
+
1037
+ def test_httpdate
1038
+ assert_instance_of(Date, Date.httpdate)
1039
+ assert_instance_of(DateTime, DateTime.httpdate)
1040
+
1041
+ d = Date.httpdate('Sat, 03 Feb 2001 04:05:06 GMT', Date::ITALY + 10)
1042
+ assert_equal(Date.new(2001,2,3), d)
1043
+ assert_equal(Date::ITALY + 10, d.start)
1044
+
1045
+ d = DateTime.httpdate('Sat, 03 Feb 2001 04:05:06 GMT', Date::ITALY + 10)
1046
+ assert_equal(DateTime.new(2001,2,3,4,5,6,'+00:00'), d)
1047
+ assert_equal(Date::ITALY + 10, d.start)
1048
+ end
1049
+
1050
+ def test_jisx0301
1051
+ assert_instance_of(Date, Date.jisx0301)
1052
+ assert_instance_of(DateTime, DateTime.jisx0301)
1053
+
1054
+ d = Date.jisx0301('H13.02.03', Date::ITALY + 10)
1055
+ assert_equal(Date.new(2001,2,3), d)
1056
+ assert_equal(Date::ITALY + 10, d.start)
1057
+
1058
+ d = DateTime.jisx0301('H13.02.03T04:05:06+07:00', Date::ITALY + 10)
1059
+ assert_equal(DateTime.new(2001,2,3,4,5,6,'+07:00'), d)
1060
+ assert_equal(Date::ITALY + 10, d.start)
1061
+ end
1062
+
1063
+ def test_given_string
1064
+ s = '2001-02-03T04:05:06Z'
1065
+ s0 = s.dup
1066
+
1067
+ assert_not_equal({}, Date._parse(s))
1068
+ assert_equal(s0, s)
1069
+
1070
+ assert_not_equal({}, Date._iso8601(s))
1071
+ assert_equal(s0, s)
1072
+
1073
+ assert_not_equal({}, Date._rfc3339(s))
1074
+ assert_equal(s0, s)
1075
+
1076
+ assert_not_equal({}, Date._xmlschema(s))
1077
+ assert_equal(s0, s)
1078
+
1079
+ s = 'Sat, 3 Feb 2001 04:05:06 UT'
1080
+ s0 = s.dup
1081
+ assert_not_equal({}, Date._rfc2822(s))
1082
+ assert_equal(s0, s)
1083
+ assert_not_equal({}, Date._rfc822(s))
1084
+ assert_equal(s0, s)
1085
+
1086
+ s = 'Sat, 03 Feb 2001 04:05:06 GMT'
1087
+ s0 = s.dup
1088
+ assert_not_equal({}, Date._httpdate(s))
1089
+ assert_equal(s0, s)
1090
+
1091
+ s = 'H13.02.03T04:05:06,07Z'
1092
+ s0 = s.dup
1093
+ assert_not_equal({}, Date._jisx0301(s))
1094
+ assert_equal(s0, s)
1095
+ end
1096
+
1097
+ end