@@ -200,9 +200,7 @@ pub fn parse_datetime_at_date<S: AsRef<str> + Clone>(
200
200
// Parse epoch seconds
201
201
if let Ok ( timestamp) = parse_timestamp ( s. as_ref ( ) ) {
202
202
if let Some ( timestamp_date) = NaiveDateTime :: from_timestamp_opt ( timestamp, 0 ) {
203
- if let Ok ( dt) = naive_dt_to_fixed_offset ( date, timestamp_date) {
204
- return Ok ( dt) ;
205
- }
203
+ return Ok ( date. offset ( ) . from_utc_datetime ( & timestamp_date) ) ;
206
204
}
207
205
}
208
206
@@ -319,6 +317,14 @@ mod tests {
319
317
let actual = parse_datetime ( dt) ;
320
318
assert_eq ! ( actual. unwrap( ) . timestamp( ) , TEST_TIME ) ;
321
319
}
320
+
321
+ #[ test]
322
+ fn test_epoch_seconds_non_utc ( ) {
323
+ env:: set_var ( "TZ" , "EST" ) ;
324
+ let dt = "@1613371067" ;
325
+ let actual = parse_datetime ( dt) ;
326
+ assert_eq ! ( actual. unwrap( ) . timestamp( ) , TEST_TIME ) ;
327
+ }
322
328
}
323
329
324
330
#[ cfg( test) ]
@@ -462,6 +468,21 @@ mod tests {
462
468
}
463
469
}
464
470
471
+ #[ cfg( test) ]
472
+ mod timeonly {
473
+ use crate :: parse_datetime_at_date;
474
+ use chrono:: { Local , TimeZone } ;
475
+ use std:: env;
476
+ #[ test]
477
+ fn test_time_only ( ) {
478
+ env:: set_var ( "TZ" , "UTC" ) ;
479
+ let test_date = Local . with_ymd_and_hms ( 2024 , 03 , 03 , 0 , 0 , 0 ) . unwrap ( ) ;
480
+ let parsed_time = parse_datetime_at_date ( test_date, "9:04:30 PM +0530" )
481
+ . unwrap ( )
482
+ . timestamp ( ) ;
483
+ assert_eq ! ( parsed_time, 1709480070 )
484
+ }
485
+ }
465
486
/// Used to test example code presented in the README.
466
487
mod readme_test {
467
488
use crate :: parse_datetime;
0 commit comments