Skip to content

Commit ff2113e

Browse files
Merge pull request #67 from matrixhead/main
epoch timezone fix
2 parents ad9a056 + deffff9 commit ff2113e

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

src/lib.rs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)