WinUI3中DateTime与int64_t互转及DatePicker日期更新问题
WinUI3 C++20:更新DatePicker日期的正确方法
你需要从存储的int64_t类型变量m_myDate(记录日期对应的纳秒数)还原DateTime并设置给DatePicker,原代码中loadBtn_Click的写法有误——std::chrono::time_point的time_since_epoch()是获取方法,不能直接用来设置值。
修正后的完整代码
void MainWindow::saveBtn_Click(IInspectable const& sender, Microsoft::UI::Xaml::RoutedEventArgs const& args) { DateTime dateTime = myDatePicker().Date(); m_myDate = dateTime.time_since_epoch().count(); } void MainWindow::loadBtn_Click(IInspectable const& sender, Microsoft::UI::Xaml::RoutedEventArgs const& args) { // 用存储的纳秒数构造duration对象 auto nanoSeconds = std::chrono::nanoseconds(m_myDate); // 基于系统时钟的纪元构造time_point,再转换为WinUI3的DateTime DateTime dateTime{ std::chrono::system_clock::time_point(nanoSeconds) }; // 设置DatePicker的日期 myDatePicker().Date(dateTime); }
关键说明
WinUI3的DateTime是std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>的特化类型,因此必须通过构造std::chrono::system_clock::time_point对象来创建有效的DateTime,而非直接修改time_since_epoch的返回值。
简化写法
如果追求代码简洁,可合并为一行:
void MainWindow::loadBtn_Click(IInspectable const& sender, Microsoft::UI::Xaml::RoutedEventArgs const& args) { myDatePicker().Date(DateTime{ std::chrono::system_clock::time_point(std::chrono::nanoseconds(m_myDate)) }); }
内容的提问来源于stack exchange,提问作者Tirsvad
相关产品推荐
相关产品推荐

