91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

大魚機(jī)器人 ? 來源:大魚機(jī)器人 ? 作者:大魚機(jī)器人 ? 2022-11-14 15:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

最近設(shè)備到了國外,時間不不準(zhǔn)了~

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

如果設(shè)備到了國外,設(shè)備的時間就不準(zhǔn)了,設(shè)備的小時數(shù)對不上當(dāng)?shù)氐男r數(shù)。我們的設(shè)備時間,是使用設(shè)備上GPS的授時時間給設(shè)備進(jìn)行時間校準(zhǔn)的。

設(shè)備從GPS拿到的時間數(shù)據(jù)只是UTC時間。所以,不同地區(qū)的時間,需要基于UTC時間+/-時區(qū),向西減小,向東增加。當(dāng)?shù)氐臅r區(qū),可以根據(jù)當(dāng)?shù)氐慕?jīng)度進(jìn)行計算,這個后面再說。

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

GMT與UTC時間

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

UTC時間(Universal Time Coordinated, 世界標(biāo)準(zhǔn)時間或世界協(xié)調(diào)時間),以原子時秒長為基礎(chǔ),在時刻上盡量接近于世界時的一種時間計量系統(tǒng)。UTC是基于標(biāo)準(zhǔn)的GMT提供的準(zhǔn)確時間。

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

1、獲取UTC時間

獲取UTC時間的接口

#include
time_ttime(time_t*tloc);

該接口返回1970-01-01 0000 +0000至今的秒數(shù)(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;
}

運(yùn)行結(jié)果:

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

2、獲取GMT時間

獲取GMT時間的接口:

#include
structtm*gmtime(consttime_t*timep);

該接口返回tm結(jié)構(gòu)的GMT時間(UTC時間)。

tm結(jié)構(gòu):

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;
}

運(yùn)行結(jié)果:

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

時區(qū)

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

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

1、時區(qū)劃分方法:

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

2、經(jīng)度范圍:

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

3、當(dāng)?shù)貢r區(qū)計算

需要用到的接口:

#include
structtm*localtime(consttime_t*timep);

計算當(dāng)?shù)貢r區(qū):

#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;
}

我們當(dāng)前為北京時間:

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

我們把Ubuntu時間日期里的地點(diǎn)改到其它國家:

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

CST 時間

CST (China Standard Time,中國標(biāo)準(zhǔn)時間)。

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

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

根據(jù)經(jīng)度計算時區(qū)

時區(qū)范圍是中央經(jīng)線的度數(shù)向左右分別減、加7.5度。用該地的經(jīng)度除以15度,當(dāng)余數(shù)小于7.5度時,商數(shù)即為該地所在的時區(qū)數(shù),當(dāng)余數(shù)大于7.5度時,商數(shù)加1即為該地所在的時區(qū)數(shù)。

#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;
}

這其實(shí)也是百度百科上提供的思路:

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

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

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

對于我們的設(shè)備,定時功能使用手機(jī)APP來操作的,這時候能想到的比較好的方法就是每當(dāng)使用手機(jī)APP的時候,把手機(jī)APP的時間給設(shè)備時間進(jìn)行一次校準(zhǔn)。

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

如果覺得文章有幫助,麻煩幫忙轉(zhuǎn)發(fā),謝謝!

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20445

    瀏覽量

    333996
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73960
  • UTC
    UTC
    +關(guān)注

    關(guān)注

    1

    文章

    24

    瀏覽量

    15599
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是嵌入式應(yīng)用開發(fā)?

    概述 所謂的嵌入式應(yīng)用開發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應(yīng)用開發(fā)?是指在嵌入式操作系統(tǒng)下進(jìn)行開發(fā),包括系統(tǒng)設(shè)計
    發(fā)表于 01-12 16:13

    arm嵌入式主板優(yōu)缺點(diǎn)

    嵌入式主板是嵌入在設(shè)備里面做控制、數(shù)據(jù)處理使用的CPU板 ,常見的有兩類,即基于X86的嵌入式主板和基于RISC的ARM 嵌入式主板。今天我
    發(fā)表于 01-08 07:08

    什么是嵌入式操作系統(tǒng)?

    、嵌入式操作系統(tǒng)的定義 嵌入式操作系統(tǒng)是專門為資源受限的嵌入式設(shè)備(比如 STM32 單片機(jī)、物聯(lián)網(wǎng)模塊、工業(yè)控制器)設(shè)計的微型操作系統(tǒng),核心作用是:管理硬件資源、調(diào)度多任務(wù)、提供標(biāo)準(zhǔn)
    發(fā)表于 12-09 10:33

    ARM嵌入式這樣學(xué)

    的內(nèi)核就是ARM內(nèi)核,它的主頻高很多,普通的都有幾百M(fèi)。CPU緩存大,分有很多級的流水處理線,這樣大大提高了CPU利用率。這種IC的資源足以讓一個嵌入式操作系統(tǒng)正常跑起來,WINCE, LINUX
    發(fā)表于 12-04 07:48

    嵌入式軟件分層架構(gòu)設(shè)計原則

    嵌入式軟件分層架構(gòu)的設(shè)計原則如下: 模塊和可擴(kuò)展性:每一層應(yīng)當(dāng)保持松耦合,這樣當(dāng)硬件變化或某些功能擴(kuò)展時,只需要修改對應(yīng)的層次,而不影響整體架構(gòu)。 硬件無關(guān)性:上層代碼應(yīng)當(dāng)盡量避免直接依賴硬件
    發(fā)表于 11-28 07:05

    嵌入式開發(fā)的關(guān)鍵點(diǎn)介紹

    開發(fā)需要考慮嵌入式系統(tǒng)的資源限制,例如:內(nèi)存、CPU處理能力等等。因此,嵌入式開發(fā)需要開發(fā)人員具備優(yōu)化代碼的能力。嵌入式系統(tǒng)的安全性非常重要
    發(fā)表于 11-13 08:12

    嵌入式實(shí)時操作系統(tǒng)的特點(diǎn)

    時間限制內(nèi)完成,而軟實(shí)時任務(wù)對時間限制更靈活。 任務(wù)調(diào)度和優(yōu)先級:實(shí)時嵌入式操作系統(tǒng)通過任務(wù)調(diào)度器來管理和分配任務(wù),通常采用優(yōu)先級調(diào)度算法,確保高優(yōu)先級的實(shí)時任務(wù)得到及時處理。 中斷
    發(fā)表于 11-13 06:30

    嵌入式需要掌握哪些核心技能?

    : 1)C語言與底層編程 核心地位:C語言是嵌入式開發(fā)的基石,需精通指針操作、內(nèi)存管理、位運(yùn)算,直接操控硬件資源。 延伸技能:C++用于復(fù)雜項(xiàng)目架構(gòu)設(shè)計,匯編語言優(yōu)化底層性能(如啟動代碼、中斷處理
    發(fā)表于 10-21 16:25

    IAR邀您相約2025上海國際嵌入式會議

    在德國紐倫堡成功舉辦二十余屆的 embedded world 嵌入式世界展覽與會議,已連續(xù)在中國落地數(shù)年。作為專注于嵌入式系統(tǒng)行業(yè)的盛會,上海國際嵌入式展已成為引領(lǐng)全球
    的頭像 發(fā)表于 10-17 10:37 ?775次閱讀

    嵌入式達(dá)到什么水平才能就業(yè)?

    工具定位問題具備嵌入式軟件模塊設(shè)計能力:能按功能劃分代碼模塊,編寫規(guī)范的頭文件與源文件,實(shí)現(xiàn)模塊間低耦合調(diào)用會使用Git 進(jìn)行版本管理:能提交代碼、解決沖突、回滾版本,熟悉敏捷開發(fā)流
    發(fā)表于 09-15 10:20

    MicroBlaze處理嵌入式設(shè)計用戶指南

    *本指南內(nèi)容涵蓋了在嵌入式設(shè)計中使用 MicroBlaze 處理器、含存儲器 IP 核的設(shè)計、IP integrator 中的復(fù)位和時鐘拓?fù)浣Y(jié)構(gòu)。獲取完整版《 MicroBlaze 處理嵌入
    的頭像 發(fā)表于 07-28 10:43 ?1077次閱讀

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    用于對實(shí)時性要求高、資源需求較低的場合,如家電控制、工業(yè)自動、小型機(jī)器人等。 Linux嵌入式 :適用于需要復(fù)雜功能、高處理能力的應(yīng)用,如智能手機(jī)、平板電腦、智能電視、汽車電子等。 2. 開發(fā)環(huán)境
    發(fā)表于 06-20 09:46

    嵌入式去哪個城市好?

    大都市,上海擁有眾多跨國公司和高科技企業(yè),特別是在電子產(chǎn)業(yè)方面有著深厚的積累和廣泛的應(yīng)用。上海的科技公司涵蓋了從智能硬件到物聯(lián)網(wǎng)的各個領(lǐng)域,為嵌入式開發(fā)人員提供了廣闊的職業(yè)發(fā)展空間。上海的國際化氛圍也
    發(fā)表于 04-02 10:12

    有方科技重磅亮相德國嵌入式

    德國紐倫堡時間3月11-13日, EmbeddedWorld 2025(德國嵌入式展)在紐倫堡國際展覽中心舉行,作為全球規(guī)模最大、專業(yè)性最強(qiáng)的嵌入式系統(tǒng)與物聯(lián)網(wǎng)技術(shù)展會,其被譽(yù)為全球智
    的頭像 發(fā)表于 03-13 09:14 ?1110次閱讀

    AMD EPYC嵌入式9005系列處理器發(fā)布

    AMD(超威,納斯達(dá)克股票代碼:AMD )今日宣布推出第五代 AMD EPYC(霄龍)嵌入式處理器,擴(kuò)展其 x86 嵌入式處理器產(chǎn)品組合。
    的頭像 發(fā)表于 03-12 17:08 ?1610次閱讀