QDate::toStdSysDays is needlessly behind __cpp_lib_chrono >= 201907L

This commit is contained in:
Dan Paulat 2023-05-26 22:42:06 -05:00
parent 1479525c4a
commit 5a078800e4
4 changed files with 56 additions and 4 deletions

View file

@ -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

View file

@ -1,6 +1,7 @@
#include "animation_dock_widget.hpp"
#include "ui_animation_dock_widget.h"
#include <scwx/qt/util/time.hpp>
#include <scwx/util/logger.hpp>
#include <QTimer>
@ -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_);
}
});

View file

@ -0,0 +1,24 @@
#include <scwx/qt/util/time.hpp>
namespace scwx
{
namespace qt
{
namespace util
{
std::chrono::sys_days SysDays(const QDate& date)
{
using namespace std::chrono;
using sys_days = time_point<system_clock, days>;
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

View file

@ -0,0 +1,25 @@
#pragma once
#include <chrono>
#include <QDateTime>
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