关于 Windows 中的时区信息
来源:互联网 发布:如何注册手机淘宝店铺 编辑:程序博客网 时间:2024/05/01 22:05
Windows API 没有提供直接得到特定时区信息的功能,Windows 系统中的时区信息存储在注册表中下面的位置:
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows NT
CurrentVersion
Time Zones
time_zone_name
下面的代码演示了如何从注册表中枚举时区信息:
#include <stdio.h>#include <windows.h>#define pWin32Error(dwSysErr, sMsg )typedef struct _REG_TZI_FORMAT{ LONG Bias; LONG StandardBias; LONG DaylightBias; SYSTEMTIME StandardDate; SYSTEMTIME DaylightDate;} REG_TZI_FORMAT;#define REG_TIME_ZONES "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\"#define REG_TIME_ZONES_LEN (sizeof(REG_TIME_ZONES)-1)#define REG_TZ_KEY_MAXLEN (REG_TIME_ZONES_LEN + (sizeof(((TIME_ZONE_INFORMATION*)0)->StandardName)/2) -1)int GetTimeZoneInformationByName(TIME_ZONE_INFORMATION *ptzi, const char StandardName[]) { int rc; HKEY hkey_tz; DWORD dw; REG_TZI_FORMAT regtzi; char tzsubkey[REG_TZ_KEY_MAXLEN+1] = REG_TIME_ZONES; strncpy(tzsubkey + REG_TIME_ZONES_LEN, StandardName, sizeof(tzsubkey) - REG_TIME_ZONES_LEN); if (tzsubkey[sizeof(tzsubkey)-1] != 0) { fprintf(stderr, "timezone name too long\n"); return -1; } if (ERROR_SUCCESS != (dw = RegOpenKey(HKEY_LOCAL_MACHINE, tzsubkey, &hkey_tz))) { fprintf(stderr, "failed to open: HKEY_LOCAL_MACHINE\\%s\n", tzsubkey); pWin32Error(dw, "RegOpenKey() failed"); return -1; } rc = 0; #define X(param, type, var) \ do if ((dw = sizeof(var)), (ERROR_SUCCESS != (dw = RegGetValueW(hkey_tz, NULL, param, type, NULL, &var, &dw)))) { \ fprintf(stderr, "failed to read: HKEY_LOCAL_MACHINE\\%s\\%S\n", tzsubkey, param); \ pWin32Error(dw, "RegGetValue() failed"); \ rc = -1; \ goto ennd; \ } while(0) X(L"TZI", RRF_RT_REG_BINARY, regtzi); X(L"Std", RRF_RT_REG_SZ, ptzi->StandardName); X(L"Dlt", RRF_RT_REG_SZ, ptzi->DaylightName); #undef X ptzi->Bias = regtzi.Bias; ptzi->DaylightBias = regtzi.DaylightBias; ptzi->DaylightDate = regtzi.DaylightDate; ptzi->StandardBias = regtzi.StandardBias; ptzi->StandardDate = regtzi.StandardDate;ennd: RegCloseKey(hkey_tz); return rc;}#define ZONE "Russian Standard Time"int main(int argc, char* argv[]){ DWORD dw; TIME_ZONE_INFORMATION tzi; dw = GetTimeZoneInformationByName(&tzi, ZONE); if (dw != 0) return 1; SYSTEMTIME lt; SYSTEMTIME ut = { 2000, /*WORD wYear;*/ 1, /*WORD wMonth;*/ 0, /*WORD wDayOfWeek;*/ 1, /*WORD wDay;*/ 12, /*WORD wHour;*/ 0, /*WORD wMinute;*/ 0, /*WORD wSecond;*/ 0 /*WORD wMilliseconds;*/ }; SystemTimeToTzSpecificLocalTime(&tzi, &ut, <); printf("%d-%02d-%02d %02d:%02d:%02d UTC\n", ut.wYear, ut.wMonth, ut.wDay, ut.wHour, ut.wMinute, ut.wSecond); printf("=\n"); printf("%d-%02d-%02d %02d:%02d:%02d Europe/Moscow\n", lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond); return 0;}
0 0
- 关于 Windows 中的时区信息
- 时区设置- Windows 平台
- 时区设置- Windows 平台
- Windows设置时区
- windows wampserver 时区设置
- windows时区数据
- C#修改Windows时区
- 关于时区的换算.
- 关于java时区问题
- 关于oracle时区
- 关于oracle时区
- 关于linux的时区
- 关于时区 待续
- 关于设置会话时区
- 关于linux时间、时区
- magento 关于时间/时区
- android 关于时区问题
- 关于时区AS3
- dojo中的dojox/grid/EnhancedGrid表格报错
- 开通我的博客了
- ubuntu下 vi编辑器使用手册
- Matlab学术图表色彩选择
- 386计算机毕业设计
- 关于 Windows 中的时区信息
- Access 在VBA中实现数据导出到Excel
- C++构造函数初始化列表——笔记
- 百钱买百鸡问题
- 是男人就下100层【第一层】——高仿微信界面(2)
- Ubuntu 下Mysql常用命令
- 分数拆分
- C语言经典算法100例-009-输出国际象棋棋盘
- HTML5 Video