C# 转换C日期时间到C++ STD:::SoCo::SysLogiCalth::TimeSyPoT 我需要在C++ +CLR代码中,将C++中的DATE时间转换成C++ STD:::TooRo::StultLogCiel:TimeSyPooT等价。
这些代码能完成任务吗?还有更好的方法吗C# 转换C日期时间到C++ STD:::SoCo::SysLogiCalth::TimeSyPoT 我需要在C++ +CLR代码中,将C++中的DATE时间转换成C++ STD:::TooRo::StultLogCiel:TimeSyPooT等价。,c#,c++,datetime,C#,C++,Datetime,这些代码能完成任务吗?还有更好的方法吗 std::chrono::system_clock::time_point ConvertDateTime(DateTime dateTime) { Int32 unixTimestamp = (Int32)(dateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; std::chrono::system_clock::time_point ret = std::ch
std::chrono::system_clock::time_point ConvertDateTime(DateTime dateTime)
{
Int32 unixTimestamp = (Int32)(dateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
std::chrono::system_clock::time_point ret = std::chrono::system_clock::from_time_t(unixTimestamp );
return ret;
}
我认为你的代码不起作用,尽管我没有可用的DateTime来测试我不在Windows上。UtcNow是一个静态函数,返回以当前UTC时间表示的当前时间,这可能意味着:时间持续时间超过1970-01-01 00:00:00 UTC。我相信你的公式与参数dateTime的值无关 我建议以DateTime.Ticks为单位进行交易。Ticks是指UTC 0001-01-01 00:00:00之后100纳秒的Ticks数,其中UTC的定义是可接受的 使用此选项,您可以轻松找到DateTime历元和system_clock历元之间的差异,即VS使用的100纳秒刻度: 首先,可以方便地将滴答声定义为100纳秒单位:
using ticks = std::chrono::duration<std::int64_t,
std::ratio_multiply<std::ratio<100>, std::nano>>;
如果您确实不喜欢使用,那么您可以在上述函数中硬编码一个神奇常数,如下所示:
std::chrono::system_clock::time_point
ConvertDateTime(DateTime dateTime)
{
using namespace std::chrono;
return system_clock::time_point{ticks{dateTime.Ticks - 621355968000000000}};
}
这两种方法中的任何一种都可以得到一个系统时钟::时间点,其精度与Windows上的DateTime完全相同。我认为您的代码不起作用,尽管我没有DateTime可供测试,但我不在Windows上。UtcNow是一个静态函数,返回以当前UTC时间表示的当前时间,这可能意味着:时间持续时间超过1970-01-01 00:00:00 UTC。我相信你的公式与参数dateTime的值无关 我建议以DateTime.Ticks为单位进行交易。Ticks是指UTC 0001-01-01 00:00:00之后100纳秒的Ticks数,其中UTC的定义是可接受的 使用此选项,您可以轻松找到DateTime历元和system_clock历元之间的差异,即VS使用的100纳秒刻度: 首先,可以方便地将滴答声定义为100纳秒单位:
using ticks = std::chrono::duration<std::int64_t,
std::ratio_multiply<std::ratio<100>, std::nano>>;
如果您确实不喜欢使用,那么您可以在上述函数中硬编码一个神奇常数,如下所示:
std::chrono::system_clock::time_point
ConvertDateTime(DateTime dateTime)
{
using namespace std::chrono;
return system_clock::time_point{ticks{dateTime.Ticks - 621355968000000000}};
}
这两种方法中的任何一种都可以得到一个系统时钟::时间点,其精度与VS上的DateTime完全相同