资源简介
自实现的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
相关资源
- RL-ARM用户手册 中文版本
- ARM_指令感谢周立功老师提供
- 学ARM和学单片机一样简单
- ARM汇编官方手册中文
- Tiny6410流水灯——在已经启动的ARM L
- ARM嵌入式课程设计不错的哦,东西很
- ARM9 Mini2440核心板原理图和PCB已经封装
- arm7用户手册中文非常详细
- arm cortex-m0 lpc 1114的14个例程
- lame支持armv6 armv7 i386 armv7s
- Keil uvison 4 for ARM 基本使用方法
- 嵌入式系统语音采集与播放程序设计
- AMBA总线协议,最全
- Armadillo注册机使用教程.rar
- 基于stm32的仿生机械手程序-基础
- rtl8188eu驱动及工具arm开发板移植详细
- swarm安装及环境配置
- 基于ARM_linux多媒体播放器的Qt源码
- NXP LPC1768开发板之用户手册
- ARMv7-M Architecture Reference Manual 体系结构
-
Keil_ARM_MDK_5.12和破解文件,j-li
nk固件 - AHBA 总线 ARM 总线体系结构 中文版 P
- 基于ARM和Linux的嵌入式视频采集存储系
- 基于ARM的嵌入式液位控制系统的研究
- iar for arm 8.11注册机
- ARMA建模资料
- 第二届全国大学生集成电路创新创业
- Eclipse 搭建ARM Lniux 内核驱动开发环境
- WAV格式报警铃声90个
- ARM stm32f407 开发板原理图及 PCB图
评论
共有 条评论