gpt4 book ai didi

c++ - 转换从公历开始到现在的天数

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:27 24 4
gpt4 key购买 nike

我正在处理包含时间维度的 netCDF4 文件。此时间维度的值是 double 值,表示自 1582 年 10 月 15 日 00:00 以来的天数。为了允许用户与数据交互,我需要将这些时间戳转换为实际日期(例如 01:01:2014T00:00:00)。

在研究这个问题时,我找不到用 C++ 解决这个问题的方法。 netCDF Python 库提供了 num2date 和 date2num,它们正是我需要的。遗憾的是,我在 C++ 库中找不到这些函数。对于如何执行此操作的任何建议,我将不胜感激。

最佳答案

使用 Howard Hinnant's time/date library 很容易做到这一点.

#include "date/date.h"
#include <iostream>

date::sys_time<std::chrono::seconds>
to_time_point(double d)
{
using namespace date;
using namespace std::chrono;
using ddays = duration<double, days::period>;
return round<seconds>(ddays{d} + sys_days{1582_y/10/15});
}

int
main()
{
using namespace date;
std::cout << to_time_point(159562.572297) << '\n';
}

输出:

2019-08-27 13:44:06

你没有提到你想要什么精度,但从你的示例输出来看,我推测是秒。您可以选择任何您想要的计时精度。该程序只是将您的 double 转换为进入double -based chrono-duration,周期为 days , 然后将其添加到纪元中。结果是 chrono::system_clock::time_point以您选择的精度。尽管我建议您不要使用 nanoseconds . nanoseconds精度比 double 高 3 个数量级将在此范围内交付,并且范围为 sys_time<nanoseconds>是 [1677-09-21 00:12:43.145224192, 2262-04-11 23:47:16.854775807]。而 sys_time<microseconds> 的范围是 +/-292 千年(充足)。

您可以使用相同的库来格式化此 time_point以任何你想要的风格。例如:

std::cout << format("%d:%m:%YT%T", to_time_point(159562.572297)) << '\n';

输出:

27:08:2019T13:44:06

如果您在更新的标准可用后选择使用该库,那么使用该库将非常好地迁移到 C++20。

关于c++ - 转换从公历开始到现在的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57674895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com