@@ -200,9 +200,7 @@ pub fn parse_datetime_at_date<S: AsRef<str> + Clone>(
200200 // Parse epoch seconds
201201 if let Ok ( timestamp) = parse_timestamp ( s. as_ref ( ) ) {
202202 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) ) ;
206204 }
207205 }
208206
@@ -319,6 +317,14 @@ mod tests {
319317 let actual = parse_datetime ( dt) ;
320318 assert_eq ! ( actual. unwrap( ) . timestamp( ) , TEST_TIME ) ;
321319 }
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+ }
322328 }
323329
324330 #[ cfg( test) ]
@@ -462,6 +468,21 @@ mod tests {
462468 }
463469 }
464470
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+ }
465486 /// Used to test example code presented in the README.
466487 mod readme_test {
467488 use crate :: parse_datetime;
0 commit comments