1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use chrono::datetime::DateTime;
use chrono::offset::fixed::FixedOffset;
use chrono::Timelike;
use chrono::offset::Offset;
pub fn format_w3c(datetime: &DateTime<FixedOffset>) -> String {
let mut format = String::from("%FT%T");
let offset = datetime.timezone().local_minus_utc().num_seconds();
if datetime.nanosecond() > 0 {
format = format + "%.f";
}
if offset == 0 {
format = format + "Z";
} else {
let sign;
if offset >= 0 {
sign = "+";
} else {
sign = "-";
}
let offset = offset.abs();
let hour = offset / 3600;
let offset_seconds = offset - hour * 3600;
let minute = offset_seconds / 60;
format = format + &format!("{}{:02}:{:02}",sign,hour,minute);
}
return format!("{}",datetime.format(&format));
}