windows-nt/Source/XPSP1/NT/printscan/ui/printui/time.cxx
2020-09-26 16:20:57 +08:00

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;
}