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

どうすればこれを達成できますか?

もう1つの質問は、日付「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

あなたをそこに導くことができる複数の方法と機能があります。

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 に答える
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 に答える