在C ++中为FILETIME结构分配数据和时间

时间:2012-06-27 08:58:59

标签: c++

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

谢谢!

3 个答案:

答案 0 :(得分:0)

将值“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);

答案 1 :(得分: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

答案 2 :(得分:0)

有多种方法和功能可以帮助你。

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

你也有C(++)的mktime()从1970年开始以秒为单位获得时间。然后你需要将其转换为自1601年1月1日起的秒数,加入11644473600,将其缩放到100纳秒并添加秒分数。

但是SystemTimeToFileTime()是一个更好的选择,因为它也处理毫秒。

how can I get number of seconds elapsed like 64-bit integer for date "2012-06-25 12:00:10.123"?

的含义尚不清楚

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

从那时起的一段时间过去了几秒钟?同样,获取日期/时间对的秒数并减去。