From 5a078800e4abad08532b397a5fd4d8f70fb19002 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 26 May 2023 22:42:06 -0500 Subject: [PATCH] QDate::toStdSysDays is needlessly behind __cpp_lib_chrono >= 201907L --- scwx-qt/scwx-qt.cmake | 6 +++-- .../scwx/qt/ui/animation_dock_widget.cpp | 5 ++-- scwx-qt/source/scwx/qt/util/time.cpp | 24 ++++++++++++++++++ scwx-qt/source/scwx/qt/util/time.hpp | 25 +++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 scwx-qt/source/scwx/qt/util/time.cpp create mode 100644 scwx-qt/source/scwx/qt/util/time.hpp diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 5aaa1f2a..1cee1716 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -186,7 +186,8 @@ set(HDR_UTIL source/scwx/qt/util/color.hpp source/scwx/qt/util/streams.hpp source/scwx/qt/util/texture_atlas.hpp source/scwx/qt/util/q_file_buffer.hpp - source/scwx/qt/util/q_file_input_stream.hpp) + source/scwx/qt/util/q_file_input_stream.hpp + source/scwx/qt/util/time.hpp) set(SRC_UTIL source/scwx/qt/util/color.cpp source/scwx/qt/util/file.cpp source/scwx/qt/util/font.cpp @@ -195,7 +196,8 @@ set(SRC_UTIL source/scwx/qt/util/color.cpp source/scwx/qt/util/json.cpp source/scwx/qt/util/texture_atlas.cpp source/scwx/qt/util/q_file_buffer.cpp - source/scwx/qt/util/q_file_input_stream.cpp) + source/scwx/qt/util/q_file_input_stream.cpp + source/scwx/qt/util/time.cpp) set(HDR_VIEW source/scwx/qt/view/level2_product_view.hpp source/scwx/qt/view/level3_product_view.hpp source/scwx/qt/view/level3_radial_view.hpp diff --git a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp index a147cef3..f9bcbd58 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp @@ -1,6 +1,7 @@ #include "animation_dock_widget.hpp" #include "ui_animation_dock_widget.h" +#include #include #include @@ -65,7 +66,7 @@ AnimationDockWidget::AnimationDockWidget(QWidget* parent) : ui->dateEdit->setDate(currentDate); ui->timeEdit->setTime(currentTime); ui->dateEdit->setMaximumDate(currentDateTime.date()); - p->selectedDate_ = currentDate.toStdSysDays(); + p->selectedDate_ = util::SysDays(currentDate); p->selectedTime_ = std::chrono::seconds(currentTime.msecsSinceStartOfDay() / 1000); @@ -129,7 +130,7 @@ void AnimationDockWidgetImpl::ConnectSignals() { if (date.isValid()) { - selectedDate_ = date.toStdSysDays(); + selectedDate_ = util::SysDays(date); emit self_->DateTimeChanged(selectedDate_ + selectedTime_); } }); diff --git a/scwx-qt/source/scwx/qt/util/time.cpp b/scwx-qt/source/scwx/qt/util/time.cpp new file mode 100644 index 00000000..f34c6ea5 --- /dev/null +++ b/scwx-qt/source/scwx/qt/util/time.cpp @@ -0,0 +1,24 @@ +#include + +namespace scwx +{ +namespace qt +{ +namespace util +{ + +std::chrono::sys_days SysDays(const QDate& date) +{ + using namespace std::chrono; + using sys_days = time_point; + constexpr auto julianEpoch = sys_days {-4713y / November / 24d}; + constexpr auto unixEpoch = sys_days {1970y / January / 1d}; + constexpr auto offset = std::chrono::days(julianEpoch - unixEpoch); + + return std::chrono::sys_days(std::chrono::days(date.toJulianDay()) + + julianEpoch); +} + +} // namespace util +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/util/time.hpp b/scwx-qt/source/scwx/qt/util/time.hpp new file mode 100644 index 00000000..8f3e7a53 --- /dev/null +++ b/scwx-qt/source/scwx/qt/util/time.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include + +namespace scwx +{ +namespace qt +{ +namespace util +{ + +/** + * @brief Convert QDate to std::chrono::sys_days. + * + * @param [in] date Date to convert + * + * @return Days + */ +std::chrono::sys_days SysDays(const QDate& date); + +} // namespace util +} // namespace qt +} // namespace scwx