Ich benötige die gleiche formatierte Zeichenfolge. In meiner Anwendung funktioniert der folgende Code, aber die Werte sind nicht wie folgt:
Code: Select all
SYSTEMTIME systemTime = { 0 };
FILETIME fileTime = { 0 };
FILETIME localFileTime = { 0 };
PROPVARIANT pvDateModified;
PropVariantInit(&pvDateModified);
//...
HRESULT hrDateModified = pObjectProperties->GetValue(WPD_OBJECT_DATE_MODIFIED, &pvDateModified);
if (pvDateModified.vt != VT_EMPTY) {
// (0) Comes back as Variant Time:
// RESULT:
// pvDateModified.date = 42005.000000000
// (1) Need to convert to System Time first:
// RESULT:
// wYear=2015
// wMonth=1
// wDay=1
VariantTimeToSystemTime(pvDateModified.date, &systemTime);
// (3) In order to use SHDateFormatTime, need to convert to File Time:
// RESULT:
// dwLowDateTime = 3803807744
// dwHighDateTime = 30418261
SystemTimeToFileTime(&systemTime, &fileTime);
// (4) Format using SHFormatDateTime:
// RESULT:
// 12/31/2014 7:00 PM
wchar_t datebuf[80];
DWORD flags = FDTF_NOAUTOREADINGORDER | FDTF_DEFAULT; // tried with and without, no difference
SHFormatDateTime(&fileTime, &flags, datebuf, 80);
//...
}
Code: Select all
// (4) Convert to Local Time First:
// RESULT:
// dwLowDateTime = 4192434176
// dwHighDateTime = 30418219
FileTimeToLocalFileTime(&fileTime, &localFileTime);
// (5) Format using SHFormatDateTime:
// RESULT:
// 12/31/2014 2:00 PM
wchar_t datebuf[80];
DWORD flags = FDTF_NOAUTOREADINGORDER | FDTF_DEFAULT; // tried with and without, no difference
SHFormatDateTime(&localFileTime, &flags, datebuf, 80);
//...
Mobile version