Fill in StandardName field in struct returned from GetTimeZoneInformation.
This commit is contained in:
parent
7e4741d1fd
commit
a9f8997f49
|
@ -13,6 +13,7 @@
|
||||||
#include "ntddk.h"
|
#include "ntddk.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
|
#include "wine/unicode.h"
|
||||||
#include "debugtools.h"
|
#include "debugtools.h"
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(win32);
|
DEFAULT_DEBUG_CHANNEL(win32);
|
||||||
|
@ -20,6 +21,240 @@ DEFAULT_DEBUG_CHANNEL(win32);
|
||||||
/* maximum time adjustment in seconds for SetLocalTime and SetSystemTime */
|
/* maximum time adjustment in seconds for SetLocalTime and SetSystemTime */
|
||||||
#define SETTIME_MAX_ADJUST 120
|
#define SETTIME_MAX_ADJUST 120
|
||||||
|
|
||||||
|
|
||||||
|
/* This structure is used to store strings that represent all of the time zones
|
||||||
|
in the world. (This is used to help GetTimeZoneInformation)
|
||||||
|
*/
|
||||||
|
struct tagTZ_INFO
|
||||||
|
{
|
||||||
|
const char *psTZFromUnix;
|
||||||
|
WCHAR psTZWindows[32];
|
||||||
|
int bias;
|
||||||
|
int dst;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct tagTZ_INFO TZ_INFO[] =
|
||||||
|
{
|
||||||
|
{"MHT",
|
||||||
|
{'D','a','t','e','l','i','n','e',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-720, 0},
|
||||||
|
{"SST",
|
||||||
|
{'S','a','m','o','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
660, 0},
|
||||||
|
{"HST",
|
||||||
|
{'H','a','w','a','i','i','a','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
600, 0},
|
||||||
|
{"AKDT",
|
||||||
|
{'A','l','a','s','k','a','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
480, 1},
|
||||||
|
{"PDT",
|
||||||
|
{'P','a','c','i','f','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
420, 1},
|
||||||
|
{"MST",
|
||||||
|
{'U','S',' ','M','o','u','n','t','a','i','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
420, 0},
|
||||||
|
{"MDT",
|
||||||
|
{'M','o','u','n','t','a','i','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
360, 1},
|
||||||
|
{"CST",
|
||||||
|
{'C','e','n','t','r','a','l',' ','A','m','e','r','i','c','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
360, 0},
|
||||||
|
{"CDT",
|
||||||
|
{'C','e','n','t','r','a','l',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
300, 1},
|
||||||
|
{"COT",
|
||||||
|
{'S','A',' ','P','a','c','i','f','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
300, 0},
|
||||||
|
{"EDT",
|
||||||
|
{'E','a','s','t','e','r','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
240, 1},
|
||||||
|
{"EST",
|
||||||
|
{'U','S',' ','E','a','s','t','e','r','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
300, 0},
|
||||||
|
{"ADT",
|
||||||
|
{'A','t','l','a','n','t','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
180, 1},
|
||||||
|
{"VET",
|
||||||
|
{'S','A',' ','W','e','s','t','e','r','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
240, 0},
|
||||||
|
{"CLT",
|
||||||
|
{'P','a','c','i','f','i','c',' ','S','A',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
240, 0},
|
||||||
|
{"NDT",
|
||||||
|
{'N','e','w','f','o','u','n','d','l','a','n','d',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
150, 1},
|
||||||
|
{"BRT",
|
||||||
|
{'E','.',' ','S','o','u','t','h',' ','A','m','e','r','i','c','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
180, 0},
|
||||||
|
{"ART",
|
||||||
|
{'S','A',' ','E','a','s','t','e','r','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
180, 0},
|
||||||
|
{"WGST",
|
||||||
|
{'G','r','e','e','n','l','a','n','d',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
120, 1},
|
||||||
|
{"GST",
|
||||||
|
{'M','i','d','-','A','t','l','a','n','t','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
120, 0},
|
||||||
|
{"AZOST",
|
||||||
|
{'A','z','o','r','e','s',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
0, 1},
|
||||||
|
{"CVT",
|
||||||
|
{'C','a','p','e',' ','V','e','r','d','e',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
60, 0},
|
||||||
|
{"WET",
|
||||||
|
{'G','r','e','e','n','w','i','c','h',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
0, 0},
|
||||||
|
{"BST",
|
||||||
|
{'G','M','T',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-60, 1},
|
||||||
|
{"GMT",
|
||||||
|
{'G','M','T',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
0, 0},
|
||||||
|
{"CEST",
|
||||||
|
{'C','e','n','t','r','a','l',' ','E','u','r','o','p','e',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-120, 1},
|
||||||
|
{"WAT",
|
||||||
|
{'W','.',' ','C','e','n','t','r','a','l',' ','A','f','r','i','c','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-60, 0},
|
||||||
|
{"EEST",
|
||||||
|
{'E','.',' ','E','u','r','o','p','e',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-180, 1},
|
||||||
|
{"EET",
|
||||||
|
{'E','g','y','p','t',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-120, 0},
|
||||||
|
{"CAT",
|
||||||
|
{'S','o','u','t','h',' ','A','f','r','i','c','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-120, 0},
|
||||||
|
{"IST",
|
||||||
|
{'I','s','r','a','e','l',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-120, 0},
|
||||||
|
{"ADT",
|
||||||
|
{'A','r','a','b','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-240, 1},
|
||||||
|
{"AST",
|
||||||
|
{'A','r','a','b',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-180, 0},
|
||||||
|
{"MSD",
|
||||||
|
{'R','u','s','s','i','a','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-240, 1},
|
||||||
|
{"EAT",
|
||||||
|
{'E','.',' ','A','f','r','i','c','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-180, 0},
|
||||||
|
{"IRST",
|
||||||
|
{'I','r','a','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-270, 1},
|
||||||
|
{"GST",
|
||||||
|
{'A','r','a','b','i','a','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-240, 0},
|
||||||
|
{"AZST",
|
||||||
|
{'C','a','u','c','a','s','u','s',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-300, 1},
|
||||||
|
{"AFT",
|
||||||
|
{'A','f','g','h','a','n','i','s','t','a','n',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-270, 0},
|
||||||
|
{"YEKST",
|
||||||
|
{'E','k','a','t','e','r','i','n','b','u','r','g',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-360, 1},
|
||||||
|
{"PKT",
|
||||||
|
{'W','e','s','t',' ','A','s','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-300, 0},
|
||||||
|
{"IST",
|
||||||
|
{'I','n','d','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-330, 0},
|
||||||
|
{"NPT",
|
||||||
|
{'N','e','p','a','l',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-345, 0},
|
||||||
|
{"ALMST",
|
||||||
|
{'N','.',' ','C','e','n','t','r','a','l',' ','A','s','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-420, 1},
|
||||||
|
{"BDT",
|
||||||
|
{'C','e','n','t','r','a','l',' ','A','s','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-360, 0},
|
||||||
|
{"LKT",
|
||||||
|
{'S','r','i',' ','L','a','n','k','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-360, 0},
|
||||||
|
{"MMT",
|
||||||
|
{'M','y','a','n','m','a','r',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-390, 0},
|
||||||
|
{"ICT",
|
||||||
|
{'S','E',' ','A','s','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-420, 0},
|
||||||
|
{"KRAST",
|
||||||
|
{'N','o','r','t','h',' ','A','s','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-480, 1},
|
||||||
|
{"CST",
|
||||||
|
{'C','h','i','n','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-480, 0},
|
||||||
|
{"IRKST",
|
||||||
|
{'N','o','r','t','h',' ','A','s','i','a',' ','E','a','s','t',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-540, 1},
|
||||||
|
{"SGT",
|
||||||
|
{'M','a','l','a','y',' ','P','e','n','i','n','s','u','l','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-480, 0},
|
||||||
|
{"WST",
|
||||||
|
{'W','.',' ','A','u','s','t','r','a','l','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-480, 0},
|
||||||
|
{"JST",
|
||||||
|
{'T','o','k','y','o',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-540, 0},
|
||||||
|
{"KST",
|
||||||
|
{'K','o','r','e','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-540, 0},
|
||||||
|
{"YAKST",
|
||||||
|
{'Y','a','k','u','t','s','k',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-600, 1},
|
||||||
|
{"CST",
|
||||||
|
{'C','e','n','.',' ','A','u','s','t','r','a','l','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-570, 0},
|
||||||
|
{"EST",
|
||||||
|
{'E','.',' ','A','u','s','t','r','a','l','i','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-600, 0},
|
||||||
|
{"GST",
|
||||||
|
{'W','e','s','t',' ','P','a','c','i','f','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-600, 0},
|
||||||
|
{"VLAST",
|
||||||
|
{'V','l','a','d','i','v','o','s','t','o','k',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-660, 1},
|
||||||
|
{"MAGST",
|
||||||
|
{'C','e','n','t','r','a','l',' ','P','a','c','i','f','i','c',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-720, 1},
|
||||||
|
{"NZST",
|
||||||
|
{'N','e','w',' ','Z','e','a','l','a','n','d',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-720, 0},
|
||||||
|
{"FJT",
|
||||||
|
{'F','i','j','i',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-720, 0},
|
||||||
|
{"TOT",
|
||||||
|
{'T','o','n','g','a',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e','\0'},
|
||||||
|
-780, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* TIME_GetTZAsStr: helper function that returns the given timezone as a string.
|
||||||
|
This could be done with a hash table instead of merely iterating through
|
||||||
|
a table, however with the small amount of entries (60 or so) I didn't think
|
||||||
|
it was worth it. */
|
||||||
|
static const WCHAR* TIME_GetTZAsStr (time_t utc, int bias, int dst)
|
||||||
|
{
|
||||||
|
char psTZName[7];
|
||||||
|
struct tm *ptm = localtime(&utc);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!strftime (psTZName, 7, "%Z", ptm))
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
for (i=0; i<(sizeof(TZ_INFO) / sizeof(struct tagTZ_INFO)); i++)
|
||||||
|
{
|
||||||
|
if ( strcmp(TZ_INFO[i].psTZFromUnix, psTZName) == 0 &&
|
||||||
|
TZ_INFO[i].bias == bias &&
|
||||||
|
TZ_INFO[i].dst == dst
|
||||||
|
)
|
||||||
|
return TZ_INFO[i].psTZWindows;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* TIME_GetBias: helper function calculates delta local time from UTC */
|
/* TIME_GetBias: helper function calculates delta local time from UTC */
|
||||||
static int TIME_GetBias( time_t utc, int *pdaylight)
|
static int TIME_GetBias( time_t utc, int *pdaylight)
|
||||||
{
|
{
|
||||||
|
@ -187,6 +422,8 @@ DWORD WINAPI GetTimeZoneInformation(
|
||||||
{
|
{
|
||||||
time_t gmt;
|
time_t gmt;
|
||||||
int bias, daylight;
|
int bias, daylight;
|
||||||
|
const WCHAR *psTZ;
|
||||||
|
|
||||||
|
|
||||||
memset(tzinfo, 0, sizeof(TIME_ZONE_INFORMATION));
|
memset(tzinfo, 0, sizeof(TIME_ZONE_INFORMATION));
|
||||||
|
|
||||||
|
@ -196,7 +433,8 @@ DWORD WINAPI GetTimeZoneInformation(
|
||||||
tzinfo->Bias = -bias / 60;
|
tzinfo->Bias = -bias / 60;
|
||||||
tzinfo->StandardBias = 0;
|
tzinfo->StandardBias = 0;
|
||||||
tzinfo->DaylightBias = -60;
|
tzinfo->DaylightBias = -60;
|
||||||
|
psTZ = TIME_GetTZAsStr (gmt, (-bias/60), daylight);
|
||||||
|
if (psTZ) strcpyW( tzinfo->StandardName, psTZ );
|
||||||
return TIME_ZONE_ID_STANDARD;
|
return TIME_ZONE_ID_STANDARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue