From 110d15e345824b57d83d336d55f383509333ae99 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Mon, 19 Dec 2022 18:38:10 -0800 Subject: timestamps: use millisecond precision --- adenosine-cli/src/lib.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/adenosine-cli/src/lib.rs b/adenosine-cli/src/lib.rs index 19ba060..e232667 100644 --- a/adenosine-cli/src/lib.rs +++ b/adenosine-cli/src/lib.rs @@ -316,24 +316,28 @@ pub fn value_from_fields(fields: Vec) -> Value { Value::Object(serde_json::map::Map::from_iter(map.into_iter())) } -/// Helper to generate the current timestamp as right now, UTC, formatted as a string. +/// Helper to generate the current timestamp as right now, UTC, formatted as an RFC 3339 string. /// -/// Returns something like "2022-11-22T09:21:15Z" +/// Currently, bluesky PDS expects millisecond precision, so we use that. +/// +/// Returns something like "2022-11-22T09:21:15.640Z" pub fn created_at_now() -> String { - let now = time::OffsetDateTime::now_utc() - .replace_microsecond(0) - .unwrap(); + let now = time::OffsetDateTime::now_utc(); + // remove microsecond precision, but retain millisecond precision + let ms = now.millisecond(); + let now = now.replace_microsecond(0).unwrap(); + let now = now.replace_millisecond(ms).unwrap(); now.format(&time::format_description::well_known::Rfc3339) .unwrap() } #[test] fn test_created_at_now() { - // eg: 2022-11-22T09:20:44Z + // eg: 2022-11-22T09:20:44.123Z let ts = created_at_now(); println!("{}", ts); assert_eq!(&ts[4..5], "-"); assert_eq!(&ts[7..8], "-"); assert_eq!(&ts[10..11], "T"); - assert_eq!(&ts[19..20], "Z"); + assert_eq!(&ts[23..24], "Z"); } -- cgit v1.2.3