253 lines
4.2 KiB
C++
253 lines
4.2 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) Microsoft Corporation, 1997 - 1998
|
||
|
All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
time.cxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
time related functions.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Steve Kiraly (SteveKi) 18-Dec-1997
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.hxx"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "time.hxx"
|
||
|
#include "persist.hxx"
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Name:
|
||
|
|
||
|
GetTimeZoneBias
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Returns the time zone bias.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Nothing.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
Value of the time zone specific bias.
|
||
|
|
||
|
--*/
|
||
|
LONG
|
||
|
lGetTimeZoneBias(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
LONG lBias;
|
||
|
TIME_ZONE_INFORMATION tzi;
|
||
|
|
||
|
//
|
||
|
// Get the time zone specific bias.
|
||
|
//
|
||
|
switch( GetTimeZoneInformation( &tzi ) ){
|
||
|
|
||
|
case TIME_ZONE_ID_DAYLIGHT:
|
||
|
|
||
|
lBias = (tzi.Bias + tzi.DaylightBias);
|
||
|
break;
|
||
|
|
||
|
case TIME_ZONE_ID_STANDARD:
|
||
|
|
||
|
lBias = (tzi.Bias + tzi.StandardBias);
|
||
|
break;
|
||
|
|
||
|
case TIME_ZONE_ID_UNKNOWN:
|
||
|
|
||
|
lBias = tzi.Bias;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
DBGMSG(DBG_ERROR, ("GetTimeZoneInformation failed: %d\n", GetLastError()));
|
||
|
lBias = 0;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return lBias;
|
||
|
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Name:
|
||
|
|
||
|
SystemTimeToLocalTime
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Converts the system time in minutes to local time in minutes.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
System time in minutes to convert.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The converted local time in minutes if sucessful,
|
||
|
otherwize returns the original system time.
|
||
|
|
||
|
--*/
|
||
|
DWORD
|
||
|
SystemTimeToLocalTime(
|
||
|
IN DWORD Minutes
|
||
|
)
|
||
|
{
|
||
|
//
|
||
|
// Ensure there is no wrap around. Add a full day to
|
||
|
// prevent biases
|
||
|
//
|
||
|
Minutes += (24*60);
|
||
|
|
||
|
//
|
||
|
// Adjust for bias.
|
||
|
//
|
||
|
Minutes -= lGetTimeZoneBias();
|
||
|
|
||
|
//
|
||
|
// Now discard extra day.
|
||
|
//
|
||
|
Minutes = Minutes % (24*60);
|
||
|
|
||
|
return Minutes;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Name:
|
||
|
|
||
|
LocalTimeToSystemTime
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Converts the local time in minutes to system time in minutes.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Local time in minutes to convert.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The converted system time in minutes if sucessful,
|
||
|
otherwize returns the original local time.
|
||
|
|
||
|
--*/
|
||
|
DWORD
|
||
|
LocalTimeToSystemTime(
|
||
|
IN DWORD Minutes
|
||
|
)
|
||
|
{
|
||
|
//
|
||
|
// Ensure there is no wrap around. Add a full day to
|
||
|
// prevent biases
|
||
|
//
|
||
|
Minutes += (24*60);
|
||
|
|
||
|
//
|
||
|
// Adjust for bias.
|
||
|
//
|
||
|
Minutes += lGetTimeZoneBias();
|
||
|
|
||
|
//
|
||
|
// Now discard extra day.
|
||
|
//
|
||
|
Minutes = Minutes % (24*60);
|
||
|
|
||
|
return Minutes;
|
||
|
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Name:
|
||
|
|
||
|
bGetTimeFormatString(
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Get the time format string for the time picker
|
||
|
control without the second specifier.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Refernece to string class where to return string.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE format string returned. FALSE error occurred.
|
||
|
|
||
|
--*/
|
||
|
BOOL
|
||
|
bGetTimeFormatString(
|
||
|
IN TString &strFormatString
|
||
|
)
|
||
|
{
|
||
|
//
|
||
|
// Setup the time picker controls to use a short time format with no seconds.
|
||
|
//
|
||
|
TCHAR szTimeFormat[MAX_PATH] = {0};
|
||
|
TCHAR szTimeSep[MAX_PATH] = {0};
|
||
|
LPTSTR pszTimeFormat = szTimeFormat;
|
||
|
BOOL bStatus = FALSE;
|
||
|
|
||
|
if( GetLocaleInfo( LOCALE_USER_DEFAULT,
|
||
|
LOCALE_STIMEFORMAT,
|
||
|
szTimeFormat,
|
||
|
COUNTOF(szTimeFormat)) &&
|
||
|
|
||
|
GetLocaleInfo( LOCALE_USER_DEFAULT,
|
||
|
LOCALE_STIME,
|
||
|
szTimeSep,
|
||
|
COUNTOF(szTimeSep)))
|
||
|
{
|
||
|
INT cchTimeSep = _tcslen(szTimeSep);
|
||
|
|
||
|
TCHAR szShortTimeFormat[MAX_PATH];
|
||
|
LPTSTR pszShortTimeFormat = szShortTimeFormat;
|
||
|
|
||
|
//
|
||
|
// Remove the seconds format string and preceeding separator.
|
||
|
//
|
||
|
while (*pszTimeFormat)
|
||
|
{
|
||
|
if ((*pszTimeFormat != TEXT('s')) && (*pszTimeFormat != TEXT('S')))
|
||
|
{
|
||
|
*pszShortTimeFormat++ = *pszTimeFormat;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
*pszShortTimeFormat = TEXT('\0');
|
||
|
|
||
|
bTrimString(szShortTimeFormat, TEXT(" "));
|
||
|
bTrimString(szShortTimeFormat, szTimeSep);
|
||
|
|
||
|
pszShortTimeFormat = szShortTimeFormat + lstrlen(szShortTimeFormat);
|
||
|
}
|
||
|
|
||
|
pszTimeFormat++;
|
||
|
}
|
||
|
|
||
|
*pszShortTimeFormat = TEXT('\0');
|
||
|
|
||
|
bStatus = strFormatString.bUpdate( szShortTimeFormat );
|
||
|
}
|
||
|
|
||
|
return bStatus;
|
||
|
}
|
||
|
|