用C语言获取本地的时区

2025-01-26 17:45:40
推荐回答(4个)
回答1:

getlocaltime里面是没有时区信息的。

你可以这样:

time_t time_utc = 0;
struct tm *p_tm_time;
int time_zone = 0;

p_tm_time = localtime( &time_utc );   //转成当地时间
time_zone = ( p_tm_time->tm_hour > 12 ) ?   ( p_tm_time->tm_hour-=  24 )  :  p_tm_time->tm_hour;

把0时间转为当地时间,得到的是带时区的结果。

回答2:

使用 windows API

函数GetTimeZoneInformation可以获得当前时区的相关信息,函数原型为
DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation);

需要传递一个TIME_ZONE_INFORMATION 结构体指针,此结构体定义为
typedef struct _TIME_ZONE_INFORMATION {
LONG Bias;//以分钟为单位
WCHAR StandardName[ 32 ];//标准时间的名称
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[ 32 ];//夏令时的名称

SYSTEMTIME DaylightDate;

LONG DaylightBias;

} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;

其中UTC = local time + bias(UTC时间 = 本地时间 + bias),具体含义参看MSDN

例子:

TIME_ZONE_INFORMATION tzi;

GetTimeZoneInformation(tzi);
char strStandName [] = tzi.StandardName;

int zone = tzi.Bias/ -60; //时区,如果是中国标准时间则得到8

回答3:

#include
#include
#include

void main()
{
time_t rawtime; //time_t时间类
struct tm *timeinfo;

time(&rawtime); //获取时间
timeinfo=localtime(&rawtime); //转为当地时间,tm 时间结构

printf("当前系统时间为:%s\n",asctime(timeinfo));//asctime() 转为标准ASCII时间格式
system("pause");

printf("tsystem(\"paus\")\n");//需要输入转意字符\
return;
}

回答4:

只说方法,方便后来者:

  1. 获取本地时间戳。

  2. 获取UTC时间戳。

  3. 相减 然后 除以 3600,得到的值就是时区。

Linux 系统上我用的 tm 和time_t ,需要注意一点,tm结构体你改一个的值,其他的都会变。