C語(yǔ)言應(yīng)用(2)——判斷當(dāng)前時(shí)間是否在一個(gè)時(shí)間段內(nèi)(含跨天)

一力奋、需求

舉例有如下幾個(gè)時(shí)間段:

A.0-7點(diǎn)
B.7-20點(diǎn)
C.21-7點(diǎn)

A景殷、B兩個(gè)時(shí)間段判定很簡(jiǎn)單澡屡,只需獲取當(dāng)前時(shí)間點(diǎn)對(duì)應(yīng)的小時(shí)值,例如當(dāng)前時(shí)間為14點(diǎn)绩蜻,那么得到小時(shí)值為14室埋,然后根據(jù) 當(dāng)前時(shí)間 ≥ 開始時(shí)間,同時(shí)當(dāng)前時(shí)間 < 結(jié)束時(shí)間姚淆,判斷是否處在某個(gè)時(shí)間段內(nèi)。

但將區(qū)間值換成C組配置降淮,那么以上的方法就不再適用上忍。我們來觀察下C組的配置,起始時(shí)間為21點(diǎn)腋颠,結(jié)束時(shí)間為7點(diǎn)吓笙,很明顯已經(jīng)跨天了。
當(dāng)前時(shí)間為0-6點(diǎn)時(shí)絮蒿,以上方法不再適用叁鉴,所以要增加判斷是否 結(jié)束時(shí)間 < 開始時(shí)間

二但壮、代碼

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include "time.h"

static uint8_t startHour = 21;
static uint8_t endHour = 7;

static bool isInTime(uint8_t now)
{
    // 過夜
    if(endHour < startHour) 
    {  
        if(now >= endHour && now < startHour) 
        {  
            return false;  
        } 
        else 
        {  
            return true;  
        }  
    }   
    // 當(dāng)天
    else 
    {  
        if(now >= startHour && now < endHour) 
        {  
            return true;  
        } 
        else 
        {  
            return false;  
        }  
    }   
}

int main()
{
    char str[100];
    struct tm *time;
    uint16_t year, yday;
    uint8_t month, day, week, hour, minute, second;
    time_t timestamp = 1645444800;  /*北京時(shí)間2022-02-21 20:00:00*/
/*
    幾個(gè)用于測(cè)試的時(shí)間戳和北京時(shí)間對(duì)應(yīng)
    1645444800 = 2022-02-21 20:00:00(北京時(shí)間) 
    1645448400 = 2022-02-21 21:00:00
    1645455600 = 2022-02-21 23:00:00
    1645459200 = 2020-02-22 00:00:00
    1645484400 = 2020-02-22 07:00:00
    1645488000 = 2020-02-22 08:00:00
*/    

    /* 北京時(shí)間補(bǔ)償 */
    timestamp += 8*60*60;
    /* 調(diào)用系統(tǒng)函數(shù) */
    time = localtime(&timestamp);
    
    year = time->tm_year;   /* 自1900年算起 */
    month = time->tm_mon;   /* 從1月算起蜡饵,范圍0-11 */
    week = time->tm_wday;   /* 從周末算起,范圍0-6 */
    yday = time->tm_yday;  /* 從1月1日算起肢专,范圍0-365 */
    day = time->tm_mday;    /* 日: 1-31 */
    hour = time->tm_hour;   /* 小時(shí):0-23點(diǎn),UTC+0時(shí)間 */
    minute = time->tm_min;  /* 分鐘:0-59 */
    second = time->tm_sec;  /* 0-60焦辅,偶爾出現(xiàn)的閏秒 */
    
    /* 時(shí)間校正 */
    year += 1900;
    month += 1;
    week += 1;
    
    printf("UNIX時(shí)間戳:%d\r\n", timestamp);
    printf("開始時(shí)間:%d點(diǎn)\r\n結(jié)束時(shí)間:%d點(diǎn)\r\n", startHour, endHour);
    
    /* 格式化時(shí)間字符串 */
    strftime(str, 100, "%F %T", time);  /* 2020-07-01 02:16:51 */
    printf("%s\r\n", str);
    
    if(isInTime(hour))
    {
        printf("在時(shí)間段內(nèi)\r\n", str);
    }
    else
    {
        printf("不在時(shí)間段內(nèi)!E纺肌仆抵!\r\n", str);
    }
   
   return 0;
}

測(cè)試結(jié)果:



? 由 Leung 寫于 2022 年 2 月 22 日

? 參考:Java判斷某時(shí)間是否在一個(gè)時(shí)間段
    判定某個(gè)小時(shí)是否處于一個(gè)時(shí)間區(qū)間的實(shí)現(xiàn)(含跨天)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舔糖,一起剝皮案震驚了整個(gè)濱河市莺匠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摇庙,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卫袒,死亡現(xiàn)場(chǎng)離奇詭異夕凝,居然都是意外死亡户秤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門转砖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲸伴,“玉大人莉兰,你說我怎么就攤上這事∩颊蓿” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵狂男,是天一觀的道長(zhǎng)品腹。 經(jīng)常有香客問我,道長(zhǎng)泡垃,這世上最難降的妖魔是什么羡鸥? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任惧浴,我火速辦了婚禮,結(jié)果婚禮上衷旅,老公的妹妹穿的比我還像新娘。我一直安慰自己茄袖,他們只是感情好九串,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著品山,像睡著了一般烤低。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涯呻,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音复罐,去河邊找鬼。 笑死胀滚,一個(gè)胖子當(dāng)著我的面吹牛乱投,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戚炫,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼双肤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了其监?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤抖苦,失蹤者是張志新(化名)和其女友劉穎锌历,沒想到半個(gè)月后峦筒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卤材,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年扇丛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帆精。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卓练,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出襟企,到底是詐尸還是另有隱情,我是刑警寧澤拱撵,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布表蝙,位于F島的核電站府蛇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏汇跨。R本人自食惡果不足惜妆距,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚪黑。 院中可真熱鬧中剩,春花似錦、人聲如沸结啼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)属铁。三九已至,卻和暖如春红选,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坟乾。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留明吩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓印荔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仍律。 傳聞我的和親對(duì)象是個(gè)殘疾皇子实柠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容