/*
********************************************************************************
-* Copyright (C) 2005-2011, International Business Machines
+* Copyright (C) 2005-2012, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************************
*
#if U_PLATFORM_HAS_WIN32_API
#include "wintz.h"
-
#include "cmemory.h"
#include "cstring.h"
# define NOMCX
#include <windows.h>
-#define MAX_LENGTH_ID 32
+#define MAX_LENGTH_ID 40
/* The layout of the Tzi value in the registry */
typedef struct
char tmpid[MAX_LENGTH_ID];
int32_t apiStdLength = 0;
int32_t len;
+ int id;
+ char ISOcode[3]; //2 letter iso code
LONG result;
TZI tziKey;
u_austrncpy(apiStdName, apiStd, apiStdLength);
tmpid[0] = 0;
+
+ id = GetUserGeoID(GEOCLASS_NATION);
+ GetGeoInfo(id,GEO_ISO2,ISOcode,3,0);
bundle = ures_openDirect(NULL, "windowsZones", &status);
ures_getByKey(bundle, "mapTimezones", bundle, &status);
tziKey.daylightBias = tziReg.daylightBias;
if (uprv_memcmp((char *)&tziKey, (char*)&tziReg, sizeof(tziKey)) == 0) {
- const UChar* icuTZ = ures_getStringByKey(winTZ, "001", &len, &status);
+ const UChar* icuTZ = ures_getStringByKey(winTZ, ISOcode, &len, &status);
+
+ if (icuTZ==NULL) {
+ //fallback to default "001" and reset status
+ status = U_ZERO_ERROR;
+ icuTZ = ures_getStringByKey(winTZ, "001", &len, &status);
+ }
+
if (U_SUCCESS(status)) {
/* Get the standard name from the registry key to compare with
the one from Windows API call. */
* the current time zone information)
*/
if (idFound || tmpid[0] == 0) {
- uprv_memset(tmpid, 0, sizeof(tmpid));
- u_austrncpy(tmpid, icuTZ, len);
+ //if icuTZ has more than one city, take only the first (i.e. terminate icuTZ at first space)
+ int index=0;
+ while (! (*icuTZ == '\0' || *icuTZ ==' ')) {
+ tmpid[index++]=*icuTZ++;
+ }
+ tmpid[index]='\0';
+
+ //uprv_memset(tmpid, 0, sizeof(tmpid));
+ //u_austrncpy(tmpid, icuTZ, len);
}
}
}
}
ures_close(bundle);
-
- return icuid;
+
+ return icuid;
}
#endif /* U_PLATFORM_HAS_WIN32_API */