getlocaltime里面是没有时区信息的。
你可以这样:
time_t time_utc = 0struct 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时间转为当地时间,得到的是带时区的结果。
c 语言获取现在时间用 time(NULL)无论你在哪个时区,那个国家,time(NULL) 返回值 是 一模一样的,因为它等于
UTC 时间,从 1970年1月1日0时起到现在的 秒数。
当地时间的计算,涉及到时区。中国用东八区,当地时间偏移量 是 UTC+8 小时。
每年3月的最后一个星期天是几号,与年有关。
每年10月最后一个星期天是几号,与年有关。
算得 起始 月日,结束 月日。
当你的时间 介于 起始结束之间 就是 夏令时,设 key=1.
=======
下面给你 提示,算出 每年起始截止 月日,换算到 JD ( 该年的第几天),
你自己 得到 现在时间,调 YMD_2_JD 得到 JD_now,
if (JD_now <jd2 &&JD_now >jd) key =1else key=0
=========
#include<stdio.h>
#include<math.h>
#include<time.h>
int YMD_2_WeekDay(int Y, int M, int D){
int offset,jd,weekD
offset = ((Y-1)+(Y-1)/4-(Y-1)/100+(Y-1)/400) % 7
jd = YMD_2_JD(Y,M,D)
weekD = (jd + offset) % 7
return weekD
}
int YMD_2_JD(int Y, int M, int D){
const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31}
int JD,i
JD=D
for (i=0i<Mi++) JD+=MonthDay[i]
if (((Y%4==0)&&(Y%100!=0)||(Y%400==0)) &&(M>2)) JD++
return JD
}
int main()
{
int Y=2015,M=3,D=31,M2=10,D2=31
int wd,wd2,jd,jd2
wd = YMD_2_WeekDay(Y,M,D)
wd2 = YMD_2_WeekDay(Y,M2,D2)
D=D-wd
D2=D2-wd2
printf("date: %d %d\n",D,D2)
jd=YMD_2_JD(Y,M,D)
jd2 = YMD_2_JD(Y,M2,D2)
printf("J day: %d %d\n",jd,jd2)
return 0
}
/*
time(NULL)gets time
elapsed since 00:00 hours, Jan 1, 1970 UTC
*/