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