Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get Duration from two DateTime / NaiveDateTime?

Tags:

rust

I'm using chrono crate

I've got date in i64 and I can get NaiveDateTime with NaiveDateTime::from_timestamp

I have Local::now() current time and I can get i64 with .timestamp()

But I still can't understand how to get Duration of my_time - current_time because it tells that Sub is not implemented if I try it like that

And if I get diff in i64 timestamps how to convert it into Duration?

e.g. I want something alike but sub is not implemented there

let uEnd = NaiveDateTime::from_timestamp(end64, 0);
let dtEnd = uEnd.sub(Local::now());
like image 282
cnd Avatar asked Oct 19 '25 13:10

cnd


1 Answers

The two date-time types are not compatible, because NaiveDateTime lacks a time zone. In this case, since you obtained it using NaiveDateTime::from_timestamp, you can convert it to a DateTime<Utc> first, and then obtain the difference with signed_duration_since.

let now = Local::now();
let naive_dt = NaiveDate::from_ymd(2018, 3, 26).and_hms(10, 02, 0);
let other_dt = DateTime::<Utc>::from_utc(naive_dt, Utc);

let diff = now.signed_duration_since(other_dt);

Playground


Future versions of chrono (after 0.4.1) will support subtracting as an alternative to calling .signed_duration_since, as long as both operands have the same time zone type. PR #237 Therefore, one will eventually be able to write this:

let diff = now.with_timezone(&Utc) - other_dt;
like image 111
E_net4 stands with Ukraine Avatar answered Oct 21 '25 03:10

E_net4 stands with Ukraine



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!