資源簡介
自實現的UTC時間與本地時間的轉換(這里只轉換成了UTC0區,要到自己的時區自己加上偏移.同時實現了UTC到本地時間的轉換和本地時間到UTC時間轉換.
UTC時間使用的是32位整型實現.沒有使用64位.因此只能存儲約132年之間的時間.
單位為s.
同時附上一個UTC轉換工具.便于對比UTC時間轉換是否正確.
工具會把時間自動從UTC時間轉換成年月日后進行時區校正.因此如果想要結果一致.請把系統時間(windows)調整為UTC0區.

代碼片段和文件信息
#include?“utc2local.h“
#include?“windows.h“
static?const?unsigned?short?days2MonthNormal[12]?=?{
31//1
31+28//2
31+28+31//3
31+28+31+30//4
31+28+31+30+31//5
31+28+31+30+31+30//6
31+28+31+30+31+30+31//7
31+28+31+30+31+30+31+31//8
31+28+31+30+31+30+31+31+30//9
31+28+31+30+31+30+31+31+30+31//10
31+28+31+30+31+30+31+31+30+31+30//11
31+28+31+30+31+30+31+31+30+31+30+31//12
};
static?const?unsigned?short?days2MonthRun[12]?=?{
31//1
31+29//2
31+29+31//3
31+29+31+30//4
31+29+31+30+31//5
31+29+31+30+31+30//6
31+29+31+30+31+30+31//7
31+29+31+30+31+30+31+31//8
31+29+31+30+31+30+31+31+30//9
31+29+31+30+31+30+31+31+30+31//10
31+29+31+30+31+30+31+31+30+31+30//11
31+29+31+30+31+30+31+31+30+31+30+31//12
};
unsigned?char?IsRunNian(unsigned?int?year)
{
//初步判定為閏年.100不閏400年又閏
if?(??year?%?4?)
return?0;
if?(?year?%?100?)
return?1;
//100不閏因此要進一步判定
if?(?year?%?400?)
return?0;
else
return?1;
}
void?Utc2LocalTime(unsigned?int?TIMEP_LOCAL_TIME?pTime)
{
/*************************************************
?*????????????1970.01.01.THURs
?*
?*/
int?i;
//? unsigned?int?hours;
//? unsigned?int?minutes;
//? unsigned?int?seconds;
unsigned?int?days;
unsigned?short?year?=?1970;
if?(pTime?==?NULL)
{
return;
}
pTime->Second?=?(TIME?%?60); //得到秒余數
TIME?=?(TIME?/?60); //得到整數分鐘數
pTime->Minute?=?(TIME?%?60); //得到分鐘余數
TIME?=?(TIME?/?60); //得到整數小時數
pTime->Hour?=?(TIME?%?24?); //得到小時余數
days?=?TIME?=?(?TIME?/?24?); //轉換為整數天數
pTime->DayOfWeek?=?(4+(days%7))%7;
while?(?days>365??)
{
if(IsRunNian(year))
days--;
days?-=?365;
year++;
}
//now?days?<=?365
if?(!IsRunNian(year)?&&?(days==?365)?)
{
year++;
pTime->Month?=?1;
pTime->Date?=?1;
pTime->Year?=?year;
return;
}
pTime->Year?=?year;
//here?days?<365
if?(IsRunNian(year)){
for?(i=0;i<12;i++){
if?(days? pTime->Month?=?i+1;
if?(i?==?0){
pTime->Date?=?days;
}else{
pTime->Date?=?days-days2MonthRun[i-1];
}
pTime->Date++;
return?;//<--------------------------------
}
}
}else{
for?(i=0;i<12;i++){
if?(days? pTime->Month?=?i+1;
if?(i?==?0){
pTime->Date?=?days;
}else{
pTime->Date?=?days-days2MonthNormal[i-1];
}
pTime->Date++;
return?;//<--------------------------------
}
}
}
return;
}
unsigned?int??LocalTime2UTC(P_LOCAL_TIME?ptTime)
{
/*???????????d0
???|?????|<------>|??????????????|???????????????|
---+--------------+--------------+---------------+--------
???|??????????????|??????????????|???????????????|
???0?????x???????400???????y????800????????????1200
?????????|<--------------->|
???dx?=?(y-x)%400
*/
unsigned?int?x?=?1970;
unsigned?int?y?=?ptTime->Year;
unsigned?int?days?=?0;
unsigned?int?dx?=?0d0?=?0;
days?+=?(y-x
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5090??2013-05-12?14:54??UTC2LOCAL.c
?????文件????????444??2013-05-12?14:13??utc2local.h
?????文件????1780552??2013-05-12?12:36??UTC2Time.rar
-----------?---------??----------?-----??----
??????????????1786086????????????????????3
評論
共有 條評論