在窗口和C++中。我有以下代码。
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
struct DateTime
{
unsigned int dwLowDateTime;
unsigned int dwHighDateTime;
};
FILETIME ftTime;
GetSystemTimeAsFileTime(&ftTime);
DateTime myTime;
myTime.dwHighDateTime = (unsigned int)ftTime.dwHighDateTime;
myTime.dwLowDateTime = (unsigned int)ftTime.dwLowDateTime;
现在我需要分配这样的值
2012-06-25 12:00:10.123
到"myTime"或ftTime。
我怎样才能实现这一点?
另一个问题是我如何获得日期"2012-06-25 12:00:10.123"的 64 位整数等经过的秒数?如何将其转换为__int64以便分配给 FILETIME?
我在另一个问题帖子中看到过
__int64 t;
FILETIME ft;
ft.dwLowDateTime = (DWORD)t;
ft.dwHighDateTime = (DWORD)(t >> 32);
我不应该在我的项目中使用 Boost。
谢谢!
将值"2012-06-25 12:00:10.123"分配给SystemTime结构,并使用函数SystemTimeToFileTime将其转换为FileTime。
SYSTEMTIME st,st1;
st.wDay = 25;
st.wMonth = 06;
st.wYear = 2012;
st.wHour = 12;
st.wMinute = 10;
st.wSecond = 10;
st.wMilliseconds = 10;
FILETIME ft;
SystemTimeToFileTime(&st,&ft);
FileTimeToSystemTime(&ft,&st1);
有多种方法和功能可以让你到达那里。
您可以使用DosDateTimeToFileTime()
将年/月/日h:m:s转换为FILETIME
。您需要额外注意奇数秒和秒分数。
您还有 C(++) 的mktime()
,可以自 1970 年以来首次获取以秒为单位的时间。然后,您需要通过向其添加11644473600将其转换为自 1601 年 1 月 1 日以来的秒,将其缩放到 100 纳秒并添加秒分数。
但SystemTimeToFileTime()
是更好的选择,因为它也可以处理毫秒。
不清楚你说的how can I get number of seconds elapsed like 64-bit integer for date "2012-06-25 12:00:10.123"?
是什么意思
从那时到现在,几秒钟过去了?如果是这样,您可以获得当前时间(以秒为单位),并将给定的日期/时间转换为秒(如上所述),然后从另一个中减去一个。
从更早的时间到那时已经过去了几秒钟?做同样的事情,为日期/时间对获取秒数并减去。
使用 SystemTimeToFileTime。
将日期时间数据分配给SYSTEMTIME
结构。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
并使用
BOOL WINAPI SystemTimeToFileTime(
__in const SYSTEMTIME *lpSystemTime,
__out LPFILETIME lpFileTime
);
用于转换。
更新:要从字符串转换为日期,时间组件,可以使用DateTime::Parse Method(String)
方法。然后将值分配给SYSTEMTIME
结构,然后将其转换为 FileTime
。