FILETIME在C#中的实现
本文关键字:实现 FILETIME | 更新日期: 2023-09-27 18:19:55
我正在尝试将一些C++项目转换为C#。我现在正在为我在C++中遇到的一个时间类而挣扎。它有如下方法:
const RsDateTime& RsDateTime::GetTime()
{
FILETIME ft;
::GetSystemTimeAsFileTime(&ft);
::FileTimeToLocalFileTime(&ft, &m_Time); // Why call to local time? What does it do?
return *this;
}
FILETIME RsDateTime::GetUTCTimeAsFile() const
{
FILETIME ft;
::LocalFileTimeToFileTime(&m_Time, &ft); // Why call to local time?
return ft;
}
static unsigned __int64 GetAsUINT64(const FILETIME* ft)
{
ULARGE_INTEGER li;
li.LowPart = ft->dwLowDateTime;
li.HighPart = ft->dwHighDateTime;
return li.QuadPart;
}
有人能帮助我如何将其转换为C#吗?我需要使用哪些方法?此外,如上所述,FileTime
和LocalFileTime
之间的区别是什么?
在Win32(这段代码似乎就是)中,FILETIME
是:
一个64位值,表示自1601年1月1日(UTC)以来的100纳秒间隔数。
除非您依赖于1601 epoch,否则在C#/.NET中只需使用DateTime
类型,它包含:
此属性的值表示自0001年1月1日午夜12:00:00以来经过的100纳秒间隔数。
我的建议是完全放弃/忽略C++代码,除非您知道它返回的数据正在某个依赖Win32 FILETIME
的地方使用,特别是如果不知道,请删除代码并使用System.DateTime
。
DateTime
C#类现在有一个方法FromFileTime
,它将64位FILETIME结构转换为DataTime
对象。此时,您可以在c#中正常使用所有DateTime
方法和属性。
Int64 exampleTime = 0x01cff7924ade4400L;
DateTime dtModified = DateTime.FromFileTime(exampleTime);