使用c语言描述夏时令期间
发布网友
发布时间:2023-05-02 06:43
我来回答
共1个回答
热心网友
时间:2023-10-15 06:49
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 =1;else 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=0;i<M;i++) 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
*/追问感谢你费时费力的给出答案!我看看执行结果