handle millis in output
This commit is contained in:
parent
be406d9211
commit
3e71413815
|
@ -3,7 +3,7 @@ use std::io::Write;
|
|||
|
||||
use serde::{Serialize, Deserialize};
|
||||
use itertools::Itertools;
|
||||
use chrono::{DateTime, Utc, Offset, TimeZone, Duration};
|
||||
use chrono::{DateTime, Utc, Offset, TimeZone, Duration, NaiveTime, Timelike};
|
||||
|
||||
use crate::error;
|
||||
use crate::models::Entry;
|
||||
|
@ -12,6 +12,10 @@ fn format_duration(dur: Duration) -> String {
|
|||
format!("{}:{:02}:{:02}", dur.num_hours(), dur.num_minutes() % 60, dur.num_seconds() % 60)
|
||||
}
|
||||
|
||||
fn format_time(t: NaiveTime) -> String {
|
||||
format!("{: >2}:{:02}:{:02}", t.hour(), t.minute(), t.second())
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum Formatter {
|
||||
|
@ -57,8 +61,8 @@ impl Formatter {
|
|||
let mut daily = Duration::seconds(0);
|
||||
|
||||
for (i,entry) in entries.into_iter().enumerate() {
|
||||
let start = fixed_offset.from_utc_datetime(&entry.start.naive_utc()).time().to_string();
|
||||
let end = entry.end.map(|t| fixed_offset.from_utc_datetime(&t.naive_utc()).time().to_string()).unwrap_or(" ".into());
|
||||
let start = format_time(fixed_offset.from_utc_datetime(&entry.start.naive_utc()).time());
|
||||
let end = entry.end.map(|t| format_time(fixed_offset.from_utc_datetime(&t.naive_utc()).time())).unwrap_or(" ".into());
|
||||
let duration = entry.end.unwrap_or(now) - entry.start;
|
||||
daily = daily + duration;
|
||||
let duration = format_duration(duration);
|
||||
|
@ -150,6 +154,28 @@ mod tests {
|
|||
4:00:00
|
||||
-----------------------------------------------------------
|
||||
Total 8:00:00
|
||||
"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_text_output_with_millis() {
|
||||
let formatter = Formatter::Text;
|
||||
let mut output = Vec::new();
|
||||
let entries = vec![
|
||||
Entry::new_sample(1, Utc.ymd(2008, 10, 3).and_hms_milli(12, 0, 0, 432), Some(Utc.ymd(2008, 10, 3).and_hms_milli(14, 0, 0, 312))),
|
||||
];
|
||||
|
||||
let now = Utc.ymd(2008, 10, 5).and_hms(20, 0, 0);
|
||||
let offset = Utc;
|
||||
|
||||
formatter.print_formatted(entries, &mut output, now, offset).unwrap();
|
||||
|
||||
assert_eq!(PrettyString(&String::from_utf8_lossy(&output)), PrettyString("Timesheet: default
|
||||
Day Start End Duration Notes
|
||||
Fri Oct 03, 2008 12:00:00 - 14:00:00 1:59:59 entry 1
|
||||
1:59:59
|
||||
-----------------------------------------------------------
|
||||
Total 1:59:59
|
||||
"));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue