色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

寫國際化的嵌入式代碼,時間問題如何處理?

大魚機器人 ? 來源:大魚機器人 ? 作者:大魚機器人 ? 2022-11-14 15:48 ? 次閱讀

寫國際化的程序比較難處理的兩個問題可能是:時間問題編碼問題

本篇文章來聊一聊時間問題。

最近設備到了國外,時間不不準了~

雜燴君一直在東八區寫代碼,處理時間問題時,習慣性的把時區寫死為東八區,即設備的小時數總是基于GMT的小時數加上8個小時作為設備的小時數。

如果設備到了國外,設備的時間就不準了,設備的小時數對不上當地的小時數。我們的設備時間,是使用設備上GPS的授時時間給設備進行時間校準的。

設備從GPS拿到的時間數據只是UTC時間。所以,不同地區的時間,需要基于UTC時間+/-時區,向西減小,向東增加。當地的時區,可以根據當地的經度進行計算,這個后面再說。

下面我們先來了解一些概念:

GMT與UTC時間

GMT時間(Greenwich Mean Time,格林威治時間),之前作為全球時間的基準參考時間。

UTC時間(Universal Time Coordinated, 世界標準時間或世界協調時間),以原子時秒長為基礎,在時刻上盡量接近于世界時的一種時間計量系統。UTC是基于標準的GMT提供的準確時間。

UTC時間和GMT時間其實是同一個時間,只不過UTC時間用秒來表示。

1、獲取UTC時間

獲取UTC時間的接口

#include
time_ttime(time_t*tloc);

該接口返回1970-01-01 0000 +0000至今的秒數(UTC)。

使用例子:

#include
#include

time_tget_utc_time(void)
{
returntime(NULL);
}

intmain(intargc,char**argv)
{
time_tutc_time=get_utc_time();
printf("utc_time=%lds
",utc_time);

return0;
}

運行結果:

ed8195b0-632a-11ed-8abf-dac502259ad0.png

2、獲取GMT時間

獲取GMT時間的接口:

#include
structtm*gmtime(consttime_t*timep);

該接口返回tm結構的GMT時間(UTC時間)。

tm結構:

structtm
{
inttm_sec;/*Seconds(0-60)*/
inttm_min;/*Minutes(0-59)*/
inttm_hour;/*Hours(0-23)*/
inttm_mday;/*Dayofthemonth(1-31)*/
inttm_mon;/*Month(0-11)*/
inttm_year;/*Year-1900*/
inttm_wday;/*Dayoftheweek(0-6,Sunday=0)*/
inttm_yday;/*Dayintheyear(0-365,1Jan=0)*/
inttm_isdst;/*Daylightsavingtime*/
};

使用例子:

#include
#include

time_tget_utc_time(void)
{
returntime(NULL);
}

intmain(intargc,char**argv)
{
time_tutc_time=get_utc_time();
printf("utc_time=%lds
",utc_time);

structtm*gmt_tm=gmtime(&utc_time);
printf("gmttime=%.4d-%.2d-%.2d%.2d:%.2d:%.2d
",gmt_tm->tm_year+1900,
gmt_tm->tm_mon+1,
gmt_tm->tm_mday,
gmt_tm->tm_hour,
gmt_tm->tm_min,
gmt_tm->tm_sec);

return0;
}

運行結果:

ed95b108-632a-11ed-8abf-dac502259ad0.png

時區

由于世界各國家與地區經度不同,地方時區也有所不同,因此會劃分為不同的時區。

正式的時區劃分包括24個時區,每一時區由一個英文字母表示。每隔經度15°劃分一個時區,有一個例外,每個時區有一條中央子午線。

1、時區劃分方法:

現今全球共分為24個時區。英國(格林尼治天文臺舊址)為中時區(零時區)、東1—12區,西1—12區。每個時區橫跨經度15度,時間正好是1小時。最后的東、西第12區各跨經度7.5度,以東、西經180度為界。每個時區的中央經線上的時間就是這個時區內統一采用的時間,稱為區時,相鄰兩個時區的時間相差1小時。

2、經度范圍:

eda9a8ac-632a-11ed-8abf-dac502259ad0.png

3、當地時區計算

需要用到的接口:

#include
structtm*localtime(consttime_t*timep);

計算當地時區:

#include
#include

time_tget_utc_time(void)
{
returntime(NULL);
}

intmain(intargc,char**argv)
{
time_tutc_time=get_utc_time();
printf("utc_time=%lds
",utc_time);

structtm*gmt_tm=gmtime(&utc_time);
printf("gmttime=%.4d-%.2d-%.2d%.2d:%.2d:%.2d
",gmt_tm->tm_year+1900,
gmt_tm->tm_mon+1,
gmt_tm->tm_mday,
gmt_tm->tm_hour,
gmt_tm->tm_min,
gmt_tm->tm_sec);
intgmt_hour=gmt_tm->tm_hour;

structtm*local_tm=localtime(&utc_time);
printf("localtime=%.4d-%.2d-%.2d%.2d:%.2d:%.2d
",local_tm->tm_year+1900,
local_tm->tm_mon+1,
local_tm->tm_mday,
local_tm->tm_hour,
local_tm->tm_min,
local_tm->tm_sec);
intlocal_hour=local_tm->tm_hour;


intlocal_time_zone=local_hour-gmt_hour;
if(local_time_zone-12)
{
local_time_zone+=24;
}
elseif(local_time_zone>12)
{
local_time_zone-=24;
}else{}

printf("local_time_zone=%d
",local_time_zone);

return0;
}

我們當前為北京時間:

edbdd0f2-632a-11ed-8abf-dac502259ad0.png

我們把Ubuntu時間日期里的地點改到其它國家:

edee3fe4-632a-11ed-8abf-dac502259ad0.pngeeab8a36-632a-11ed-8abf-dac502259ad0.png

CST 時間

CST (China Standard Time,中國標準時間)。

中國標準時間一般指北京時間。北京時間是中國采用國際時區東八時區的區時作為標準時間。而中國幅員遼闊,東西相跨5個時區(即東五區、東六區、東七區、東八區、東九區5個時區)

“北京時間”適用于中國(大陸、港澳、臺灣)境內,但在大陸的新疆、西藏等地,政府機關、企事業單位作息時間和郵政通訊費用優惠分界點雖然用北京時間來表示,但也比其他各省延晚2小時,使用UTC+6的情況更為普遍。

根據經度計算時區

時區范圍是中央經線的度數向左右分別減、加7.5度。用該地的經度除以15度,當余數小于7.5度時,商數即為該地所在的時區數,當余數大于7.5度時,商數加1即為該地所在的時區數。

#include
#include

intcalc_timezone(doublelongitude)
{
inttimezone=0;
intquotient=(int)(longitude/15);
doubleremainder=(longitude-quotient*15);
printf("quotient=%d,remainder=%lf
",quotient,remainder);

if(remainder<=?7.5)
{
timezone=quotient;
}
else
{
timezone=quotient+(quotient>=0?+1:-1);
}

returntimezone;
}

intmain(intargc,char**argv)
{
while(1)
{
doublelongitude=0.0;
printf("pleaseinputlongitude:");
scanf("%lf",&longitude);
printf("longitude=%lf
",longitude);
inttimezone=calc_timezone(longitude);
printf("timezone=%d
",timezone);
}

return0;
}

這其實也是百度百科上提供的思路:

eecbebfa-632a-11ed-8abf-dac502259ad0.png

這種方式至少可以計算得到時區中心線的時區數,但是一些臨界情況可能會差1小時。在網絡上也沒有找到其它更好的解決方案。

設備的時間,如果只是作為一個顯示功能,影響可能不是很大,但是如果設備的時間來做其它事情,比如定時功能,定時多少點多少分做什么事情,影響就很大了。

對于我們的設備,定時功能使用手機APP來操作的,這時候能想到的比較好的方法就是每當使用手機APP的時候,把手機APP的時間給設備時間進行一次校準。

大家是否有其它更好的解決方案,歡迎留言討論

如果覺得文章有幫助,麻煩幫忙轉發,謝謝!

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5103

    文章

    19268

    瀏覽量

    310020
  • 代碼
    +關注

    關注

    30

    文章

    4857

    瀏覽量

    69526
  • UTC
    UTC
    +關注

    關注

    1

    文章

    24

    瀏覽量

    14585
收藏 人收藏

    評論

    相關推薦

    嵌入式系統中的代碼優化與壓縮技術

    與續航能力。 二、代碼優化策略 算法優化:這是最基礎且有效的優化方式。在圖像處理嵌入式應用中,傳統算法可能需要大量的計算資源和時間。采用更高效的邊緣檢測算法,如Canny算法的
    發表于 02-26 15:00

    如何提高嵌入式代碼質量?

    有著明顯的區別,主要體現在以下幾個方面: 1. 資源受限:嵌入式系統通常具有有限的內存和處理能力,因此代碼效率和內存占用是關鍵考量因素。 2. 實時性要求:某些嵌入式系統需要實時響應,
    發表于 01-15 10:48

    ARM架構嵌入式主板特點

    嵌入式主板可以理解為嵌入在設備中用于控制和數據處理的CPU板,也就是設備的“大腦”。當主板嵌入到設備中,當然對主板的體積和功耗會有更嚴格的要求(嵌入
    的頭像 發表于 12-31 16:03 ?515次閱讀
    ARM架構<b class='flag-5'>嵌入式</b>主板特點

    新手怎么學嵌入式?

    。但面對這個復雜的領域,很多人可能會感到迷茫,不知從何處入手。別擔心,本文將為你提供一些入門學習嵌入式技術的建議。 新手入門學習嵌入式技術的途徑 1. 了解基礎知識 首先,要對嵌入式
    發表于 12-12 10:51

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統的核心組件,是一種用于控制和數據處理的計算機硬件,其設計旨在嵌入特定設備中執行專門任務。嵌入式主板如同是設備
    的頭像 發表于 09-30 10:05 ?1167次閱讀

    現場直擊 | 飛凌嵌入式亮相2024上海國際嵌入式

    6月12日,2024上海國際嵌入式展(embedded world China 2024)在上海世博展覽館開幕。飛凌嵌入式不僅展出了基于NXP、TI和瑞薩等國際廠商芯片打造的
    的頭像 發表于 06-13 14:13 ?1084次閱讀
    現場直擊 | 飛凌<b class='flag-5'>嵌入式</b>亮相2024上海<b class='flag-5'>國際</b><b class='flag-5'>嵌入式</b>展

    embedded world China 2024上海國際嵌入式展 智慧賦能,科技全球!國際嵌入式產業菁英再聚上海

    2024年6月12日——為期三天的第二屆embedded world China 上海國際嵌入式展覽及會議上海世博展覽館3號館再次舉辦!在全球AI盛行的數字浪潮來襲的今天,尤其是足以改變
    發表于 06-12 11:17 ?473次閱讀

    芯原亮相2024上海國際嵌入式大會

    6月12日上午,在2024上海國際嵌入式展(Embedded World China)同期舉辦的上海國際嵌入式大會上,芯原股份創始人、董事長兼總裁戴偉民博士將以“Chiplet構建高效
    的頭像 發表于 06-11 10:54 ?987次閱讀

    下周見!飛凌嵌入式即將亮相2024上海國際嵌入式

    2024上海國際嵌入式展(embeddedworldChina2024),即將于6月12日~14日在上海世博展覽館舉行。屆時,飛凌嵌入式將攜多款前沿的嵌入式主控產品及熱門行業解決方案D
    的頭像 發表于 06-07 08:02 ?723次閱讀
    下周見!飛凌<b class='flag-5'>嵌入式</b>即將亮相2024上海<b class='flag-5'>國際</b><b class='flag-5'>嵌入式</b>展

    如何成為一名嵌入式C語言高手?

    系統中,如何調試和優化程序,如何處理實時性要求等。同時,還可以學習如何使用調試工具和硬件仿真器來輔助調試和測試。 四、積極參與開源項目和技術社區加入一些嵌入式開源項目的社區,與其他開發者交流經驗
    發表于 04-07 16:03

    什么是嵌入式微處理器?嵌入式微處理器有哪些?

    嵌入式微處理器是指嵌入到特定應用系統中的微處理器,它是整個嵌入式系統的核心,由通用處理器演變而來,具有體積小、重量輕、成本低、可靠性高等優點
    的頭像 發表于 03-29 11:39 ?1225次閱讀

    嵌入式微處理器的原理和應用

    嵌入式微處理器是專為嵌入式系統設計的微處理器,它們是嵌入式系統的核心組件,負責執行程序指令、處理數據和控制其他硬件設備。與通用微
    的頭像 發表于 03-28 15:51 ?1130次閱讀

    如何成為一名嵌入式C語言高手?

    系統中,如何調試和優化程序,如何處理實時性要求等。同時,還可以學習如何使用調試工具和硬件仿真器來輔助調試和測試。 四、積極參與開源項目和技術社區加入一些嵌入式開源項目的社區,與其他開發者交流經驗
    發表于 03-25 14:12

    鴻蒙實戰開發:【國際化部件】

    **國際化部件**為應用提供了一系列國際化接口,包括:時間日期格式、數字格式、月份星期格式
    的頭像 發表于 03-21 22:07 ?407次閱讀
    鴻蒙實戰開發:【<b class='flag-5'>國際化</b>部件】

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術集成到嵌入式系統中的一種解決方案。嵌入式系統是一種為特定應用而設計的計算機系統,它通常包括處理器、內存、外設接口等組件,并且被
    的頭像 發表于 03-15 14:29 ?1531次閱讀
    主站蜘蛛池模板: 校园男男高h小黄文 | 久久人人玩人妻潮喷内射人人 | 动漫美女被到爽了流 | 亚洲免费无码中文在线 | 免费看欧美一级特黄a大片 免费看欧美xxx片 | 久久综合中文字幕无码 | 护士被老头边摸边吃奶的视频 | 少妇高潮A片特黄久久精品网 | 毛片无码免费无码播放 | 最近中文字幕完整版高清 | 青青草伊人久久 | 国产午夜免费视频片夜色 | 国产人妻人伦精品久久无码 | 精品久久香蕉国产线看观看麻豆 | 囯产精品久久久久久久久蜜桃 | 亚洲第一伊人 | 黄网13区| 女生扒开尿口 | 国产在线一区观看 | 欧美精品九九99久久在观看 | 牛牛在线视频 | 国产精品高潮呻吟AV久久96 | 麻生希第一部快播 | 午夜神器老司机高清无码 | 色欲精品久久人妻AV中文字幕 | 国产成人自产拍免费视频 | 97免费观看视频 | 亚洲精品AV中文字幕在线 | avtt天堂网2014 | 伊人久久亚洲综合天堂 | 麻豆国产自制在线观看 | 猪蜜蜜网站在线观看电视剧 | 四虎精品久久 | 欧美日韩中文在线字幕视频 | 99视频在线免费 | 亚洲国产精品嫩草影院 | 国产婷婷综合在线视频中文 | 草莓西瓜樱桃香蕉直播视频 | 男女肉大捧进出全过程免费 | 消息称老熟妇乱视频一区二区 | av av在线 |