74 lines
1.3 KiB
C
74 lines
1.3 KiB
C
#include "time_header.h"
|
|
|
|
char const* sys_zone();
|
|
char sys_zone_name[12];
|
|
|
|
void tzsetlcl(char const *name)
|
|
{
|
|
struct state *sp = lclptr;
|
|
|
|
if (name == NULL)
|
|
{
|
|
name = sys_zone();
|
|
}
|
|
|
|
if (strlen(name) >= sizeof(lcl_TZname)) {
|
|
return;
|
|
}
|
|
|
|
if (lcl_is_set && strcmp(lcl_TZname, name) == 0) {
|
|
return;
|
|
}
|
|
|
|
if (!sp) {
|
|
lclptr = (struct state*)
|
|
AllocMem(sizeof(struct state), MEMF_PUBLIC | MEMF_CLEAR);
|
|
|
|
sp = lclptr;
|
|
}
|
|
|
|
if (sp) {
|
|
if (zoneinit(sp, name) != 0) {
|
|
zoneinit(sp, "");
|
|
}
|
|
|
|
strcpy(lcl_TZname, name);
|
|
}
|
|
|
|
settzname();
|
|
lcl_is_set = 1;
|
|
}
|
|
|
|
char const* sys_zone()
|
|
{
|
|
int hour;
|
|
struct Locale *loc;
|
|
|
|
memset(sys_zone_name, 0, sizeof(sys_zone_name));
|
|
|
|
loc = OpenLocale(NULL);
|
|
if (!loc) {
|
|
return NULL;
|
|
}
|
|
|
|
hour = loc->loc_GMTOffset / 60;
|
|
CloseLocale(loc);
|
|
|
|
strcpy(sys_zone_name, "Etc/GMT");
|
|
if(hour == 0) {
|
|
return sys_zone_name;
|
|
}
|
|
|
|
sys_zone_name[7] = hour < 0 ? '-' : '+';
|
|
hour = hour < 0 ? -hour : hour;
|
|
|
|
if (hour >= 10) {
|
|
sys_zone_name[8] = '1';
|
|
sys_zone_name[9] = '0' + hour;
|
|
} else {
|
|
sys_zone_name[8] = '0' + hour;
|
|
}
|
|
|
|
return sys_zone_name;
|
|
}
|