资源简介
自实现的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
相关资源
- IAR For ARM 7.3最新注册机
- 郭天祥ARM9视频教程
- IAR ARM 7.8破解
- IAR For ARM V5.5 注册机
- IAR for ARM 7.40 破解
- IAR For ARM 7.4 破解
- arm触摸屏与LCD校准程序三点校准法
- ARM嵌入式项目实战
- 基于ARM蓝牙传输源程序
- USB 驱动 让电脑与arm进行通信
- arm flash 烧写程序源码
- 基于LW IP的嵌入式串口服务器的设计与
- Studies In Vitro and In Vivo of Pharmacologica
- Research on pharmacological effects of lycorin
- ARM64 完整指令集,学习必备
- WINCC报表(OLE-DB Tag and Alarm Export_V8.x
- ARM9指令cache的verilog代码
- 基于ARM7处理器的CAN总线网络设计
- 基于ARM和GPRS的无线通信系统设计
- 关于proteus仿真arm7出现错误的问题
- 基于ARM7的LCD显示电压示波系统的设计
- 基于ARM7和DSP的逆变电源设计电路
- 基于ARM开发板的车辆检测系统控制单
- ARM7TDMI-S在嵌入式系统中的Bootloader代码
- ARM汇编指令集PDF
- 基于ARM7 PWM定时器的图像传感器时序信
- 基于ARM7的分布式远程测控系统设计
- LPC2100系列ARM7微控制器加密ARM芯片
- ARM7内核的中断屏蔽方法
- 基于ARM7TDMI微处理器的矿用电子皮带秤
评论
共有 条评论