Skip to content

Commit

Permalink
Truncate timestamps to milliseconds; see #214.
Browse files Browse the repository at this point in the history
  • Loading branch information
01mf02 committed Sep 25, 2024
1 parent b71ea96 commit 005af9d
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 34 deletions.
6 changes: 3 additions & 3 deletions jaq-std/src/time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ pub fn from_iso8601<V: ValT>(s: &str) -> ValR<V> {
let dt = DateTime::parse_from_rfc3339(s)
.map_err(|e| Error::str(format_args!("cannot parse {s} as ISO-8601 timestamp: {e}")))?;
if s.contains('.') {
Ok((dt.timestamp_micros() as f64 * 1e-6_f64).into())
Ok((dt.timestamp_millis() as f64 / 1000.).into())
} else {
let seconds = dt.timestamp();
isize::try_from(seconds)
Expand All @@ -29,7 +29,7 @@ pub fn to_iso8601<V: ValT>(v: &V) -> Result<String, Error<V>> {
Ok(dt.format("%Y-%m-%dT%H:%M:%SZ").to_string())
} else {
let f = v.as_f64()?;
let dt = DateTime::from_timestamp_micros((f * 1e6_f64) as i64).ok_or_else(fail)?;
Ok(dt.format("%Y-%m-%dT%H:%M:%S%.fZ").to_string())
let dt = DateTime::from_timestamp_millis((f * 1000.) as i64).ok_or_else(fail)?;
Ok(dt.format("%Y-%m-%dT%H:%M:%S%.3fZ").to_string())
}
}
26 changes: 1 addition & 25 deletions jaq-std/tests/defs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,32 +27,8 @@ fn any() {

// aliases for fromdateiso8601 and todateiso8601
yields!(fromdate, r#""1970-01-02T00:00:00Z" | fromdate"#, 86400);
yields!(
fromdate_mu,
r#""1970-01-02T00:00:00.123456Z" | fromdate"#,
86400.123456
);
yields!(todate, r#"86400 | todate"#, "1970-01-02T00:00:00Z");
yields!(
todate_mu,
r#"86400.123456 | todate"#,
"1970-01-02T00:00:00.123456Z"
);

yields!(tofromdate, "946684800|todate|fromdate", 946684800);
yields!(
tofromdate_mu,
"946684800.123456|todate|fromdate",
946684800.123456
);

#[test]
fn fromtodate() {
let iso = "2000-01-01T00:00:00Z";
give(json!(iso), "fromdate|todate", json!(iso));
let iso_mu = "2000-01-01T00:00:00.123456Z";
give(json!(iso_mu), "fromdate|todate", json!(iso_mu));
}
yields!(tofromdate, "946684800 | todate | fromdate", 946684800);

yields!(
drem_nan,
Expand Down
21 changes: 15 additions & 6 deletions jaq-std/tests/funs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,26 @@ yields!(
86400
);
yields!(
fromdate_micros,
r#""1970-01-02T00:00:00.123456Z" | fromdateiso8601"#,
86400.123456
fromdate_millis,
r#""1970-01-02T00:00:00.123Z" | fromdateiso8601"#,
86400.123
);
yields!(todate, r#"86400 | todateiso8601"#, "1970-01-02T00:00:00Z");
yields!(
todate_micros,
r#"86400.123456 | todateiso8601"#,
"1970-01-02T00:00:00.123456Z"
todate_millis,
r#"86400.123 | todateiso8601"#,
"1970-01-02T00:00:00.123Z"
);

#[test]
fn fromtodate() {
let fromto = "fromdateiso8601 | todateiso8601";
let iso = "2000-01-01T00:00:00Z";
give(json!(iso), fromto, json!(iso));
let iso_millis = "2000-01-01T00:00:00.123Z";
give(json!(iso_millis), fromto, json!(iso_millis));
}

#[test]
fn explode_implode() {
give(json!("❤ の"), "explode", json!([10084, 32, 12398]));
Expand Down

0 comments on commit 005af9d

Please sign in to comment.