0

在 Windows 和 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。

谢谢!

4

3 回答 3

1

将值“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);
于 2012-06-27T09:42:44.250 回答
0

使用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.

于 2012-06-27T09:45:45.603 回答
0

有多种方法和功能可以帮助您实现目标。

您可以使用DosDateTimeToFileTime()将年/月/日 h:m:s 转换为FILETIME. 您需要额外注意奇数秒和秒小数。

自 1970 年以来,您还拥有 C(++)mktime()以秒为单位首次获取时间。然后您需要通过向其添加 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"?

从那时到现在已经过了几秒钟?如果是这样,您将获得以秒为单位的当前时间,并将给定的日期/时间转换为秒(如上所述)并从另一个中减去一个。

从更早的时间到那时已经过去了几秒钟?做同样的事情,获取日期/时间对的秒数并减去。

于 2012-06-27T09:48:54.033 回答