You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:32:41