Not sure if I'm missing something, or chrono expanded its feature set in the meantime, but its 2021 and at least since chrono 0.4.0 there appears to be a cleaner way to do it:
https://docs.rs/chrono/0.4.19/chrono/#conversion-from-and-to-epoch-timestamps
use chrono::{DateTime, TimeZone, Utc};
// Construct a datetime from epoch:
let dt = Utc.timestamp(1_500_000_000, 0);
assert_eq!(dt.to_rfc2822(), "Fri, 14 Jul 2017 02:40:00 +0000");
// Get epoch value from a datetime:
let dt = DateTime::parse_from_rfc2822("Fri, 14 Jul 2017 02:40:00 +0000").unwrap();
assert_eq!(dt.timestamp(), 1_500_000_000);
So your full conversion should look like this:
extern crate chrono;
use chrono::*;
fn main() {
let start_date = chrono::Utc.ymd(2020, 1, 1).and_hms(0, 0, 0);
let ts = start_date.timestamp();
println!("{}", &ts);
let end_date = Utc.timestamp(ts, 0);
assert_eq!(end_date, start_date);
}