• 大小: 1.7MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-01
  • 语言: 其他
  • 标签: UTC  ARM  LOCALTIME  

资源简介

自实现的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 < days2MonthRun[i]){
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 < days2MonthNormal[i]){
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


评论

共有 条评论