- FileTimeToLocalFileTime() and LocalFileTimeToFileTime() take timezone bias into account.

svn path=/trunk/; revision=11868
This commit is contained in:
Eric Kohl 2004-11-29 15:02:33 +00:00
parent df74513933
commit 17f1fe8577

View file

@ -1,4 +1,4 @@
/* $Id: time.c,v 1.32 2004/11/21 06:51:17 ion Exp $ /* $Id: time.c,v 1.33 2004/11/29 15:02:33 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -21,16 +21,16 @@
typedef struct __DOSTIME typedef struct __DOSTIME
{ {
WORD Second:5; WORD Second:5;
WORD Minute:6; WORD Minute:6;
WORD Hour:5; WORD Hour:5;
} DOSTIME, *PDOSTIME; } DOSTIME, *PDOSTIME;
typedef struct __DOSDATE typedef struct __DOSDATE
{ {
WORD Day:5; WORD Day:5;
WORD Month:4; WORD Month:4;
WORD Year:5; WORD Year:5;
} DOSDATE, *PDOSDATE; } DOSDATE, *PDOSDATE;
#define TICKSPERMIN 600000000 #define TICKSPERMIN 600000000
@ -217,7 +217,7 @@ FileTimeToSystemTime(
/* /*
* @unimplemented * @implemented
*/ */
BOOL BOOL
STDCALL STDCALL
@ -226,15 +226,24 @@ FileTimeToLocalFileTime(
LPFILETIME lpLocalFileTime LPFILETIME lpLocalFileTime
) )
{ {
// FIXME: include time bias LARGE_INTEGER TimeZoneBias;
*((PLONGLONG)lpLocalFileTime) = *((PLONGLONG)lpFileTime);
do
{
TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
}
while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
*((PLONGLONG)lpLocalFileTime) =
*((PLONGLONG)lpFileTime) - TimeZoneBias.QuadPart;
return TRUE; return TRUE;
} }
/* /*
* @unimplemented * @implemented
*/ */
BOOL BOOL
STDCALL STDCALL
@ -243,8 +252,17 @@ LocalFileTimeToFileTime(
LPFILETIME lpFileTime LPFILETIME lpFileTime
) )
{ {
// FIXME: include time bias LARGE_INTEGER TimeZoneBias;
*((PLONGLONG)lpFileTime) = *((PLONGLONG)lpLocalFileTime);
do
{
TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
}
while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
*((PLONGLONG)lpFileTime) =
*((PLONGLONG)lpLocalFileTime) + TimeZoneBias.QuadPart;
return TRUE; return TRUE;
} }
@ -260,8 +278,8 @@ GetLocalTime(LPSYSTEMTIME lpSystemTime)
FILETIME LocalFileTime; FILETIME LocalFileTime;
GetSystemTimeAsFileTime(&FileTime); GetSystemTimeAsFileTime(&FileTime);
FileTimeToLocalFileTime (&FileTime, &LocalFileTime); FileTimeToLocalFileTime(&FileTime, &LocalFileTime);
FileTimeToSystemTime (&LocalFileTime, lpSystemTime); FileTimeToSystemTime(&LocalFileTime, lpSystemTime);
} }
@ -274,7 +292,7 @@ GetSystemTime(LPSYSTEMTIME lpSystemTime)
FILETIME FileTime; FILETIME FileTime;
GetSystemTimeAsFileTime(&FileTime); GetSystemTimeAsFileTime(&FileTime);
FileTimeToSystemTime (&FileTime, lpSystemTime); FileTimeToSystemTime(&FileTime, lpSystemTime);
} }
@ -286,12 +304,12 @@ SetLocalTime(CONST SYSTEMTIME *lpSystemTime)
{ {
FILETIME LocalFileTime; FILETIME LocalFileTime;
LARGE_INTEGER FileTime; LARGE_INTEGER FileTime;
NTSTATUS errCode; NTSTATUS Status;
SystemTimeToFileTime (lpSystemTime, &LocalFileTime); SystemTimeToFileTime(lpSystemTime, &LocalFileTime);
LocalFileTimeToFileTime (&LocalFileTime, (FILETIME *)&FileTime); LocalFileTimeToFileTime(&LocalFileTime, (FILETIME *)&FileTime);
errCode = NtSetSystemTime (&FileTime, &FileTime); Status = NtSetSystemTime(&FileTime, &FileTime);
if (!NT_SUCCESS(errCode)) if (!NT_SUCCESS(Status))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
@ -304,11 +322,11 @@ BOOL STDCALL
SetSystemTime(CONST SYSTEMTIME *lpSystemTime) SetSystemTime(CONST SYSTEMTIME *lpSystemTime)
{ {
LARGE_INTEGER NewSystemTime; LARGE_INTEGER NewSystemTime;
NTSTATUS errCode; NTSTATUS Status;
SystemTimeToFileTime (lpSystemTime, (PFILETIME)&NewSystemTime); SystemTimeToFileTime(lpSystemTime, (PFILETIME)&NewSystemTime);
errCode = NtSetSystemTime (&NewSystemTime, &NewSystemTime); Status = NtSetSystemTime(&NewSystemTime, &NewSystemTime);
if (!NT_SUCCESS(errCode)) if (!NT_SUCCESS(Status))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
@ -397,7 +415,7 @@ SystemTimeToTzSpecificLocalTime(
if (!lpTimeZoneInformation) if (!lpTimeZoneInformation)
{ {
GetTimeZoneInformation (&TimeZoneInformation); GetTimeZoneInformation(&TimeZoneInformation);
lpTzInfo = &TimeZoneInformation; lpTzInfo = &TimeZoneInformation;
} }
else else
@ -409,9 +427,9 @@ SystemTimeToTzSpecificLocalTime(
if (!lpLocalTime) if (!lpLocalTime)
return FALSE; return FALSE;
SystemTimeToFileTime (lpUniversalTime, (PFILETIME)&FileTime); SystemTimeToFileTime(lpUniversalTime, (PFILETIME)&FileTime);
FileTime.QuadPart -= (lpTzInfo->Bias * TICKSPERMIN); FileTime.QuadPart -= (lpTzInfo->Bias * TICKSPERMIN);
FileTimeToSystemTime ((PFILETIME)&FileTime, lpLocalTime); FileTimeToSystemTime((PFILETIME)&FileTime, lpLocalTime);
return TRUE; return TRUE;
} }