我不認爲你的代碼的工作,雖然我沒有DateTime
可供測試(我不是在Windows上)做。 UtcNow
是一個「靜態」函數,它返回表示爲「當前UTC時間」的當前時間,可能表示:1970-01-01 00:00:00 UTC之前的持續時間。我相信你的公式獨立於你的參數dateTime
的價值。
我推薦以DateTime.Ticks
的方式進行廣告投放管理,這是從1900-01-01 00:00:00 UTC開始的100納秒滴答數量,其中UTC是通過臨時的方式定義的。
使用此free, open source, header-only library,你可以很容易地發現在100納秒方面DateTime
時代和system_clock
時代的區別蜱VS用途:
它首先是方便地定義ticks
爲100納秒單位:
using ticks = std::chrono::duration<std::int64_t,
std::ratio_multiply<std::ratio<100>, std::nano>>;
然後ConvertDateTime
可以寫成:
std::chrono::system_clock::time_point
ConvertDateTime(DateTime dateTime)
{
using namespace date;
using namespace std::chrono;
return system_clock::time_point{ticks{dateTime.Ticks}
- (sys_days{1970_y/jan/1} - sys_days{1900_y/jan/1})};
}
如果你真的不喜歡使用this date library的想法,那麼你可以很難在上面的功能,像這樣編寫一個神奇的常數:
std::chrono::system_clock::time_point
ConvertDateTime(DateTime dateTime)
{
using namespace std::chrono;
return system_clock::time_point{ticks{dateTime.Ticks - 22089888000000000}};
}
無論是其中的一個可以讓你使用完全相同的精度爲DateTime
一個system_clock::time_point
(在VS上)。