夏令時實現(xiàn)

夏令時時間

夏令時只在某些國家實行
美國的夏令時是

  • 每年從3月份第2個星期天的2點開始沮榜,到11月份第1個星期天的1點結束,時間在標準時間基礎上加1小時喻粹,之后會回到正常時間蟆融。
  • 也有說是3月最后一個星期天1:00開始,10月最后一個星期天1:00結束守呜。

參考

-L Daylight Saving Time(模擬)
-使用c語言描述夏時令期間

代碼

3月最后一個星期天1:00開始型酥,10月最后一個星期天1:00結束。為準

  • DaylightSavingsTime.h
#ifndef __GPSIMU_FILE_RECORD_H__
#define __GPSIMU_FILE_RECORD_H__

/***************************** Macro Definition ******************************/
//#define 
#define DAYLIGHT_SAVING_TIME 1 

/*********************************** Code ************************************/
/**function: CheckDaylightSavingsTime2
 * description: Check DaylightSavingsTime
 * 夏時令是3月最后一個星期天1:00開始查乒,10月最后一個星期天1:00結束???
 * return: [0]-StandardTime, [1]-DST
 */
int CheckDaylightSavingsTime2(int Year, int month, int day, int hour, int minute, int second);

/**function: Time2DST2
 * description: time to DST
 * return: [0]-StandardTime, [1]-DST
 */
time_t Time2DST2(time_t tm_rect);
/**function: DST2Time2
 * description: DST 2 Time
 * return: [0]-StandardTime, [1]-DST
 */
time_t DST2Time2(time_t tm_rect);

#endif /* End of #ifndef __GPSIMU_FILE_RECORD_H__ */
  • DaylightSavingsTime.c
#include <pthread.h>
#include <sys/prctl.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include<math.h>

#include "DaylightSavingsTime.h"
/***************************** Macro Definition ******************************/
//#define 

/*************************** Structure Definition ****************************/
//typedef struct 

/***************************** Global Definition *****************************/

/***************************** Static Definition *****************************/
//static
const static short MonthDay[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

/*********************************** Code ************************************/
/************************************************/
/* 夏時令是3月最后一個星期天1:00開始凑保,10月最后一個星期天1:00結束??? */
/************************************************/
/**
 * description: 計算輸入日期是今年的第幾天
 */
static int YMD_2_JD(int Year, int Month, int Day)
{
    int JD;
    int i;

    JD = Day;
    for (i = 0; i < Month; i++) 
    {
        JD += MonthDay[i];
    }
    if ((((Year%4==0) && (Year%100!=0)) || (Year%400==0)) && (Month>2)) 
    {
        JD++;
    }

    return JD;
}
/**
 * description: 計算輸入日期是星期幾
 */
static int YMD_2_WeekDay(int Year, int Month, int Day)
{
    int offset, jd, weekDay;

    // 公元元年1月1日是星期一
    // 按每年365天算蓖谢,365 % 7 = 1,每年為52周多出一天
    // 還需要計算上閏年多出的天數(shù)
    offset = ((Year-1) + ((Year-1)/4 - (Year-1)/100 + (Year-1)/400)) % 7 ;// 計算上一年的最后一天是星期幾

    jd = YMD_2_JD(Year, Month, Day);// 獲取今天是第幾天
    weekDay = (jd + offset) % 7;// 上一年余的天數(shù)加上今年的天數(shù),計算出今天是星期幾

    return weekDay;
}
/**function: CheckDaylightSavingsTime2
 * description: Check DaylightSavingsTime
 * 夏時令是3月最后一個星期天1:00開始岸更,10月最后一個星期天1:00結束???
 * return: [0]-StandardTime, [1]-DST
 */
int CheckDaylightSavingsTime2(int Year, int month, int day, int hour, int minute, int second)
{
    int flagDST = 0;
    int Month = 3, Day = 31, Month2 = 10, Day2 = 31;
    int weekday, weekday2;

    weekday = YMD_2_WeekDay(Year, Month, Day);//3月31是星期幾
    weekday2 = YMD_2_WeekDay(Year, Month2, Day2);//10月31是星期幾
    Day = Day - weekday;//3月最后一個星期天
    Day2 = Day2 - weekday2;//10月最后一個星期天

    struct tm *tm_now;
    time_t rect_now;
    time_t rect_start, rect_end;
    
    struct tm tblock;
    tm_now = &tblock;

    tm_now->tm_year = Year - 1900;
    tm_now->tm_mon = 3 - 1;
    tm_now->tm_mday = Day;
    tm_now->tm_hour = 1;
    tm_now->tm_min = 0;
    tm_now->tm_sec = 0;
    rect_start = mktime(tm_now);

    tm_now->tm_year = Year - 1900;
    tm_now->tm_mon = 10 - 1;
    tm_now->tm_mday = Day2;
    tm_now->tm_hour = 1;
    tm_now->tm_min = 0;
    tm_now->tm_sec = 0;
    rect_end = mktime(tm_now);

    tm_now->tm_year = Year - 1900;
    tm_now->tm_mon = month - 1;
    tm_now->tm_mday = day;
    tm_now->tm_hour = hour;
    tm_now->tm_min = minute;
    tm_now->tm_sec = second;
    rect_now = mktime(tm_now);
    
    if(rect_now >= rect_start && rect_now <= rect_end)
    {
        flagDST = 1;
    }
    else 
    {
        flagDST = 0;
    }
    
    return flagDST;
}
/**function: Time2DST2
 * description: time to DST
 * return: [0]-StandardTime, [1]-DST
 */
time_t Time2DST2(time_t tm_rect)
{
    time_t rect = tm_rect;
    struct tm tblock;
    struct tm *tm_now;
    tm_now = &tblock;
    tm_now = localtime(&rect);

    int isDST = CheckDaylightSavingsTime2(tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
    if(isDST == 1)
    {
        rect = rect + (long)60 * 60;
        return rect;
    }

    return tm_rect;
}
/**function: DST2Time2
 * description: DST 2 Time
 * return: [0]-StandardTime, [1]-DST
 */
time_t DST2Time2(time_t tm_rect)
{
    time_t rect = tm_rect;
    struct tm tblock;
    struct tm *tm_now;
    tm_now = &tblock;

    rect = rect - (long)60 * 60;
    tm_now = localtime(&rect);

    int isDST = CheckDaylightSavingsTime2(tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
    if(isDST == 1)
    {
        return rect;
    }

    return tm_rect;
}
  • 調用
    time_t rect = time(NULL);
    printf("rect:%lu", rect);
    rect = DST2Time2(rect);
    printf("DST2Time2 rect:%lu"偎箫, rect);
    rect = Time2DST2(rect);
    printf("Time2DST2 rect:%lu"明吩, rect);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拒担,隨后出現(xiàn)的幾起案子嘹屯,更是在濱河造成了極大的恐慌,老刑警劉巖从撼,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州弟,死亡現(xiàn)場離奇詭異,居然都是意外死亡低零,警方通過查閱死者的電腦和手機婆翔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掏婶,“玉大人啃奴,你說我怎么就攤上這事⌒弁祝” “怎么了最蕾?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵依溯,是天一觀的道長。 經(jīng)常有香客問我瘟则,道長黎炉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任醋拧,我火速辦了婚禮慷嗜,結果婚禮上,老公的妹妹穿的比我還像新娘丹壕。我一直安慰自己庆械,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布菌赖。 她就那樣靜靜地躺著干奢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盏袄。 梳的紋絲不亂的頭發(fā)上忿峻,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音辕羽,去河邊找鬼逛尚。 笑死,一個胖子當著我的面吹牛刁愿,可吹牛的內容都是我干的绰寞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼铣口,長吁一口氣:“原來是場噩夢啊……” “哼滤钱!你這毒婦竟也來了?” 一聲冷哼從身側響起脑题,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤件缸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叔遂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體他炊,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年已艰,在試婚紗的時候發(fā)現(xiàn)自己被綠了痊末。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡哩掺,死狀恐怖凿叠,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤盒件,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布蹬碧,位于F島的核電站,受9級特大地震影響履恩,放射性物質發(fā)生泄漏锰茉。R本人自食惡果不足惜呢蔫,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一切心、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧片吊,春花似錦绽昏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爷贫,卻和暖如春认然,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漫萄。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工卷员, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腾务。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓毕骡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岩瘦。 傳聞我的和親對象是個殘疾皇子未巫,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容