mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-04 18:18:03 +00:00
handle formatting issues
This commit is contained in:
parent
05b4b7b9f1
commit
23ab387143
2 changed files with 37 additions and 38 deletions
|
@ -673,6 +673,7 @@ pub fn exec_timediff(values: &[Register]) -> OwnedValue {
|
|||
}
|
||||
}
|
||||
|
||||
/// Format the time duration as +/-YYYY-MM-DD HH:MM:SS.SSS as per SQLite's timediff() function
|
||||
fn format_time_duration(duration: &chrono::Duration) -> OwnedValue {
|
||||
let is_negative = duration.num_seconds() < 0;
|
||||
|
||||
|
@ -681,32 +682,31 @@ fn format_time_duration(duration: &chrono::Duration) -> OwnedValue {
|
|||
} else {
|
||||
duration.clone()
|
||||
};
|
||||
|
||||
let total_seconds = abs_duration.num_seconds();
|
||||
let hours = total_seconds / 3600;
|
||||
let hours = (total_seconds % 86400) / 3600;
|
||||
let minutes = (total_seconds % 3600) / 60;
|
||||
let seconds = total_seconds % 60;
|
||||
|
||||
let days = total_seconds / 86400;
|
||||
let years = days / 365;
|
||||
let remaining_days = days % 365;
|
||||
let months = 0;
|
||||
|
||||
let total_millis = abs_duration.num_milliseconds();
|
||||
let millis = total_millis % 1000;
|
||||
|
||||
let result = if millis > 0 {
|
||||
format!(
|
||||
"{}{:02}:{:02}:{:02}.{:03}",
|
||||
if is_negative { "-" } else { "" },
|
||||
hours,
|
||||
minutes,
|
||||
seconds,
|
||||
millis
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"{}{:02}:{:02}:{:02}",
|
||||
if is_negative { "-" } else { "" },
|
||||
hours,
|
||||
minutes,
|
||||
seconds
|
||||
)
|
||||
};
|
||||
let result = format!(
|
||||
"{}{:04}-{:02}-{:02} {:02}:{:02}:{:02}.{:03}",
|
||||
if is_negative { "-" } else { "+" },
|
||||
years,
|
||||
months,
|
||||
remaining_days,
|
||||
hours,
|
||||
minutes,
|
||||
seconds,
|
||||
millis
|
||||
);
|
||||
|
||||
OwnedValue::build_text(&result)
|
||||
}
|
||||
|
@ -1702,7 +1702,7 @@ mod tests {
|
|||
fn test_exec_timediff() {
|
||||
let start = OwnedValue::build_text("12:00:00");
|
||||
let end = OwnedValue::build_text("14:30:45");
|
||||
let expected = OwnedValue::build_text("-02:30:45");
|
||||
let expected = OwnedValue::build_text("-0000-00-00 02:30:45.000");
|
||||
assert_eq!(
|
||||
exec_timediff(&[Register::OwnedValue(start), Register::OwnedValue(end)]),
|
||||
expected
|
||||
|
@ -1710,7 +1710,7 @@ mod tests {
|
|||
|
||||
let start = OwnedValue::build_text("14:30:45");
|
||||
let end = OwnedValue::build_text("12:00:00");
|
||||
let expected = OwnedValue::build_text("02:30:45");
|
||||
let expected = OwnedValue::build_text("+0000-00-00 02:30:45.000");
|
||||
assert_eq!(
|
||||
exec_timediff(&[Register::OwnedValue(start), Register::OwnedValue(end)]),
|
||||
expected
|
||||
|
@ -1718,7 +1718,7 @@ mod tests {
|
|||
|
||||
let start = OwnedValue::build_text("12:00:01.300");
|
||||
let end = OwnedValue::build_text("12:00:00.500");
|
||||
let expected = OwnedValue::build_text("00:00:00.800");
|
||||
let expected = OwnedValue::build_text("+0000-00-00 00:00:00.800");
|
||||
assert_eq!(
|
||||
exec_timediff(&[Register::OwnedValue(start), Register::OwnedValue(end)]),
|
||||
expected
|
||||
|
@ -1726,7 +1726,7 @@ mod tests {
|
|||
|
||||
let start = OwnedValue::build_text("13:30:00");
|
||||
let end = OwnedValue::build_text("16:45:30");
|
||||
let expected = OwnedValue::build_text("-03:15:30");
|
||||
let expected = OwnedValue::build_text("-0000-00-00 03:15:30.000");
|
||||
assert_eq!(
|
||||
exec_timediff(&[Register::OwnedValue(start), Register::OwnedValue(end)]),
|
||||
expected
|
||||
|
@ -1734,7 +1734,7 @@ mod tests {
|
|||
|
||||
let start = OwnedValue::build_text("2023-05-10 23:30:00");
|
||||
let end = OwnedValue::build_text("2023-05-11 01:15:00");
|
||||
let expected = OwnedValue::build_text("-01:45:00");
|
||||
let expected = OwnedValue::build_text("-0000-00-00 01:45:00.000");
|
||||
assert_eq!(
|
||||
exec_timediff(&[Register::OwnedValue(start), Register::OwnedValue(end)]),
|
||||
expected
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue