如何在现代C 中转换为DateTime
How to convert in modern C++ a double into a datetime
如何在现代C 中转换(C 11/14/17)将Excel工作表作为CSV文件导出时已生成?
例如,DateTime出现在Excel中:
21/08/2017 11:54
已被Excel转换为CSV文件,为double:
42968.4958333333
谢谢。
在2019年7月11日编辑:此问题是关于使用date.h库的使用。其他问题指出的是"可能的重复",不需要使用此库(另请参见下面的评论 date.h 库的作者)
使用date.h,看起来像这样:
#include "date/date.h"
#include <iostream>
std::chrono::system_clock::time_point
to_chrono_time_point(double d)
{
using namespace std::chrono;
using namespace date;
using ddays = duration<double, days::period>;
return sys_days{December/30/1899} + round<system_clock::duration>(ddays{d});
}
int
main()
{
using date::operator<<;
std::cout << to_chrono_time_point(42968.495833333333333333333) << 'n';
}
输出:
2017-08-21 11:54:00.000000
此定义假定您的映射从42968.4958333333到2017年8月21日11:54是正确的。我在另一个地方看到这个时代应该是1899-12-31,而不是1899-12-30。无论如何,一旦找到正确的时代,这就是一个人执行计算的方式。
ah,https://en.wikipedia.org/wiki/leap_year_bug解释了偏离的错误。Excel的作者故意将1900认为是leap年,目的是与Lotus 1-2-3的向后兼容。
此输出是在system_clock::duration
为microseconds
的MACO上生成的。在system_clock::duration
具有其他单位的其他平台上,输出将略有不同。
旁边:在此范围内,IEEE 64位double
的精度比nanoseconds
更粗糙,但比microseconds
更好(在microsecond
的一半)。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从c++11 time_t创建一个可转换为.net DateTime的字符串
- 如何在现代C 中转换为DateTime
- 将MySQL DateTime转换为C STD :: TIME_T
- 将datetime c++结构(以字节形式接收)转换为c#日期时间实例
- 将系统::Datetime转换为QDateTime
- C++ Boost将UNIX时间戳转换为MySQL兼容的DATETIME字符串
- 正在将SYSTEMTIME(本机C++)转换为DateTime(C#)
- 将UTCTime转换为DateTime
- 如何从std::tm转换为Windows::Foundation::DateTime
- 将一天中的小时和一周中的天转换为c++中的datetime
- Borland TDateTime到.net DateTime的转换