Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换C日期时间到C++ STD:::SoCo::SysLogiCalth::TimeSyPoT 我需要在C++ +CLR代码中,将C++中的DATE时间转换成C++ STD:::TooRo::StultLogCiel:TimeSyPooT等价。_C#_C++_Datetime - Fatal编程技术网

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完全相同