Re: String to FILETIME
"Tom Serface" <tom@nospam.camaswood.com> ha scritto nel messaggio
news:%23e9X5OLgJHA.504@TK2MSFTNGP06.phx.gbl...
Here is a routine I used to convert a date I had:
CTime MyApp::ConvertUTCDateTime(LPCTSTR szDateTime)
{
// Parse the start date from format 2008-04-03T16:03:52+08:00
[...]
Tom: analyzing your code, I think that this code is missing the time zone
specification (e.g. +08:00) in the conversion.
Of course, I can be wrong, so please correct me if I am missing something
(it's also late here :)
I tried your routine with the addition of this code (beacuse the OP
requested a conversion to FILETIME):
<code>
LPCTSTR szInputDate = _T("2009-01-23T11:57:26-06:00");
CTime t = Tom::ConvertUTCDateTime(szInputDate);
SYSTEMTIME sysTime;
ATLVERIFY(t.GetAsSystemTime(sysTime));
FILETIME fileTime;
SystemTimeToFileTime(&sysTime, &fileTime);
</code>
And I compared that with the routine I proposed (using C++/CLI and .NET
System.DateTime.ParseExact with proper format string):
<code>
__int64 UTCDateTimeToFileTime(String^ utc)
{
// Parse input string
String^ expectedFormat = "yyyy-MM-ddTHH:mm:sszzz";
System::DateTime ^ resultDateTime = System::DateTime::ParseExact(
utc,
expectedFormat,
System::Globalization::CultureInfo::InvariantCulture
);
// Convert it to Windows file time
return resultDateTime->ToFileTime();
}
</code>
and it seems to me that we get two different results.
e.g. with the input string:
2009-01-23T11:57:26-06:00
my routine returns this 64-bit integer value for FILETIME:
0x1c97d840cc28700
instead yours returns this:
0x1c980d29222a000
I can be wrong, but my idea is that your code is not considering the time
zone specification.
Actually, I kind of hope that I am wrong :) because your code has the
advantage of being pure C++ and not depending on .NET framework classes.
Thanks,
G