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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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_zone12)
{
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的時間給設備時間進行一次校準。






審核編輯:劉清

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

    關注

    22

    文章

    2986

    瀏覽量

    169571
  • UTC
    UTC
    +關注

    關注

    1

    文章

    24

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

  • jf_726112751

評論

相關推薦
熱點推薦

從焊接角度,設計PCB的5個建議

完成個電路板,需要PCB工程師、焊接工藝、焊接工人等諸多環節的把控。今天通過定位孔、MARK點、留邊、焊盤過孔、輔助工具這五個方面從畫板的角度跟大家PCB設計。
的頭像 發表于 02-06 10:31 ?2273次閱讀
從焊接角度<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>,設計PCB的5個建議

消息隊列技術選型的7種消息場景

我們在做消息隊列的技術選型時,往往會結合業務場景進行考慮。今天來消息隊列可能會用到的 7 種消息場景。
的頭像 發表于 12-09 17:50 ?1730次閱讀
<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>消息隊列技術選型的7種消息場景

Qt多國語言(國際化)問題小結

的需求,筆者就教學與項目開發中的經歷,小結了Qt多國語言(國際化)問題,僅供參考。 假設我們已經建好個工程,且可以運行出基本的界面。1、打開項目工程文件QTDemo.pro,添加如下語句
發表于 05-18 10:35

Altium中Fill,Polygon Pour,Plane的區別和用法

Fill會造成短路,為什么還用它呢?來Altium中Fill,Polygon Pour,Plane的區別和用法
發表于 04-25 06:29

stm32的低功耗調試

前言:物聯網的大部分設備都是電池供電的,設備本身低功耗對延長設備使用至關重要,今天就實際調試總結stm32的低功耗調試。1、stm32在運行狀態下的功耗上圖截圖自stm32l15x手冊
發表于 08-11 08:18

平衡小車代碼的實現

前言今天代碼,只有直立功能的代碼。代碼總體思路給定個目標值,單片機通過IIC和mpu6050通信,得知數據后,根據角度環計算出個P
發表于 01-14 08:29

淺議基于JSF的Java國際化編程及其實現

本文從實際操作的角度,討論了利用JSF 開發Web 應用程序時實現程序國際化和本地的方法。提出了解決應用程序
發表于 01-27 13:47 ?9次下載

IIC總線設計

大家好,又到了每日學習的時間了,今天咱們來 IIC 總線設計。 、概述: IIC 是Inter-Integrated Circuit
的頭像 發表于 06-22 10:32 ?9606次閱讀

聽北京鯨世科技的CEO,數據可視的發展

可視的展示形式也改變著人類的對信息的閱讀和理解方式。今天ARinChina就請到了專注于數字可視技術的北京鯨世科技有限公司的CEO楊利堃,我們起來
發表于 03-11 15:37 ?3580次閱讀

7個維度和43條使用規范,Redis的最佳實踐

這篇文章我想和你 Redis 的最佳實踐。 你的項目或許已經使用 Redis 很長時間了,但在使用過程中,你可能還會或多或少地遇到以下問題: 我的 Redis 內存為什么增長這么
的頭像 發表于 03-30 10:40 ?1960次閱讀
7個維度和43條使用規范,<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>Redis的最佳實踐

FPGA中的彩色轉灰度的算法

大家好,又到了每日學習的時間了,今天我們來FPGA學習中可以遇到的些算法,今天就
的頭像 發表于 04-15 15:47 ?2224次閱讀

【職場雜談】與嵌入式物聯網架構師幾個話題

【職場雜談】與嵌入式物聯網架構師幾個話題
的頭像 發表于 08-23 09:19 ?1734次閱讀
【職場雜談】與嵌入式物聯網架構師<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>幾個話題

簡單DPT技術-double pattern technology

今天想來簡單DPT技術-double pattern technology,也就是雙層掩模版技術,在目前先進工藝下,這項技術已經應用的很普遍了。
的頭像 發表于 12-05 14:26 ?3080次閱讀

芯片設計的NDR是什么?

今天突然想route相關的問題,講講NDR是什么,我也梳理總結下我對NDR的認識。
的頭像 發表于 12-06 15:14 ?3274次閱讀

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

**國際化部件**為應用提供了一系列國際化接口,包括:時間日期格式、數字格式、月份星期格式
的頭像 發表于 03-21 22:07 ?575次閱讀
鴻蒙實戰開發:【<b class='flag-5'>國際化</b>部件】
主站蜘蛛池模板: 国际老妇高清在线观看 | 日日噜噜噜夜夜爽爽狠狠 | 韩国电影real在线观看完整版 | 成人国内精品久久久久影 | 手机在线国产视频 | 美女张开腿露出尿口扒开来摸动漫 | 亚洲一区日韩一区欧美一区a | 一个人免费播放高清在线观看 | 亚洲精品久久久一区 | 99久久国产露脸精品麻豆 | 久久精品九九亚洲精品天堂 | 青年医生插曲 | 欧美18精品久久久无码午夜福利 | 黄色片网站下载 | 免费黄色网址在线观看 | 亚洲一区二区三区乱码在线欧洲 | 男女啪啪久久精品亚洲A | 国产色婷婷亚洲99精品 | 青柠电影高清在线观看 | 美女张开腿露尿口给男人亲 | 狠日狠干日曰射 | 亚洲中文无码AV在线观看 | 欧美国产成人在线 | 18禁止观看免费私人影院 | 小黄文纯肉污到你湿 | 色爱区综合小说 | 黄色软件视频app | 免费精品美女久久久久久久久 | 精品亚洲一区二区三区在线播放 | 亚洲伊人久久大香线蕉综合图片 | 龙泽罗拉av| 韩国电影real在线观看完整版 | 快穿之H啪肉 | 色婷婷激婷婷深爱五月小蛇 | 亚洲乱妇88网 | 99久久国产极品蜜臀AV酒店 | 孕交videosgratis乌克兰 | 女教师杨雪的性荡生活 | 午夜在线视频国产极品片 | 护士美女照片 | 国产精品成人免费视频99 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品