@@ -97,12 +97,19 @@ where T: AsRef<[u8]>
9797 . map_err_to_code ( ErrorCode :: BadBytes , || {
9898 format ! ( "Cannot parse value:{} to Date type" , v)
9999 } ) ?;
100- let mut dt = tz. from_local_datetime ( & d. and_hms ( 0 , 0 , 0 ) ) . unwrap ( ) ;
100+ let mut dt = tz
101+ . from_local_datetime ( & d. and_hms_opt ( 0 , 0 , 0 ) . unwrap ( ) )
102+ . unwrap ( ) ;
101103
102104 let less_1000 = |dt : DateTime < Tz > | {
103105 // convert timestamp less than `1000-01-01 00:00:00` to `1000-01-01 00:00:00`
104106 if dt. year ( ) < 1000 {
105- Ok ( tz. from_utc_datetime ( & NaiveDate :: from_ymd ( 1000 , 1 , 1 ) . and_hms ( 0 , 0 , 0 ) ) )
107+ Ok ( tz. from_utc_datetime (
108+ & NaiveDate :: from_ymd_opt ( 1000 , 1 , 1 )
109+ . unwrap ( )
110+ . and_hms_opt ( 0 , 0 , 0 )
111+ . unwrap ( ) ,
112+ ) )
106113 } else {
107114 Ok ( dt)
108115 }
@@ -133,13 +140,13 @@ where T: AsRef<[u8]>
133140 if times. len ( ) < 3 {
134141 times. resize ( 3 , 0 ) ;
135142 dt = tz
136- . from_local_datetime ( & d. and_hms ( times[ 0 ] , times[ 1 ] , times[ 2 ] ) )
143+ . from_local_datetime ( & d. and_hms_opt ( times[ 0 ] , times[ 1 ] , times[ 2 ] ) . unwrap ( ) )
137144 . unwrap ( ) ;
138145 return less_1000 ( dt) ;
139146 }
140147
141148 dt = tz
142- . from_local_datetime ( & d. and_hms ( times[ 0 ] , times[ 1 ] , times[ 2 ] ) )
149+ . from_local_datetime ( & d. and_hms_opt ( times[ 0 ] , times[ 1 ] , times[ 2 ] ) . unwrap ( ) )
143150 . unwrap ( ) ;
144151
145152 // ms .microseconds
@@ -187,7 +194,12 @@ where T: AsRef<[u8]>
187194 if self . ignore ( |b| b == b'z' || b == b'Z' ) {
188195 // ISO 8601 The Z on the end means UTC (that is, an offset-from-UTC of zero hours-minutes-seconds).
189196 if dt. year ( ) < 1000 {
190- Ok ( tz. from_utc_datetime ( & NaiveDate :: from_ymd ( 1000 , 1 , 1 ) . and_hms ( 0 , 0 , 0 ) ) )
197+ Ok ( tz. from_utc_datetime (
198+ & NaiveDate :: from_ymd_opt ( 1000 , 1 , 1 )
199+ . unwrap ( )
200+ . and_hms_opt ( 0 , 0 , 0 )
201+ . unwrap ( ) ,
202+ ) )
191203 } else {
192204 let current_tz = dt. offset ( ) . fix ( ) . local_minus_utc ( ) ;
193205 calc_offset ( current_tz. into ( ) , 0 , & dt)
@@ -239,11 +251,18 @@ where T: AsRef<[u8]>
239251 || ( ( 0 ..60 ) . contains ( & minute_offset) && hour_offset < 14 )
240252 {
241253 if dt. year ( ) < 1970 {
242- Ok ( tz. from_utc_datetime ( & NaiveDate :: from_ymd ( 1970 , 1 , 1 ) . and_hms ( 0 , 0 , 0 ) ) )
254+ Ok ( tz. from_utc_datetime (
255+ & NaiveDate :: from_ymd_opt ( 1970 , 1 , 1 )
256+ . unwrap ( )
257+ . and_hms_opt ( 0 , 0 , 0 )
258+ . unwrap ( ) ,
259+ ) )
243260 } else {
244261 let current_tz_sec = dt. offset ( ) . fix ( ) . local_minus_utc ( ) ;
245- let mut val_tz_sec = FixedOffset :: east ( hour_offset * 3600 + minute_offset * 60 )
246- . local_minus_utc ( ) ;
262+ let mut val_tz_sec =
263+ FixedOffset :: east_opt ( hour_offset * 3600 + minute_offset * 60 )
264+ . unwrap ( )
265+ . local_minus_utc ( ) ;
247266 if west_tz {
248267 val_tz_sec = -val_tz_sec;
249268 }
0 commit comments