在C++中将数据和时间分配给文件时间结构



在窗口和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

最新更新