📄 unixtime.c
字号:
#include "stdio.h"
#include "conio.h"
#include "math.h"
#define uchar unsigned char;
#define uint unsigned int;
void unixtime_to_localtime(long int unixtimetemp);
long int localtime_to_unixtime();
typedef struct CLK
{
unsigned int Year;
unsigned char Month;
unsigned char Day;
unsigned char Hour;
unsigned char Minute;
unsigned char Second;
unsigned char Week;
} CLOCK;
CLOCK system_clk_temp,clock;
main()
{ long int unixtimetemp1;
clock.Year = 2007;
clock.Month = 9;
clock.Day = 2;
clock.Hour = 5;
clock.Minute = 0;
clock.Second = 0;
clock.Week = 0;
system_clk_temp = clock;
/*unixtime_to_localtime(0x4b1cd0f4);
printf("%d\n",system_clk_temp.Year);
printf("%d\n",system_clk_temp.Month);
printf("%d\n",system_clk_temp.Day);
printf("%d\n",system_clk_temp.Hour);
printf("%d\n",system_clk_temp.Minute);
printf("%d\n",system_clk_temp.Second);*/
unixtimetemp1 = localtime_to_unixtime();
printf("%lx\n",unixtimetemp1);
unixtime_to_localtime(0x48bce802);
printf("%d\n",system_clk_temp.Year);
printf("%d\n",system_clk_temp.Month);
printf("%d\n",system_clk_temp.Day);
printf("%d\n",system_clk_temp.Hour);
printf("%d\n",system_clk_temp.Minute);
printf("%d\n",system_clk_temp.Second);
getch();
}
void unixtime_to_localtime(long int unixtimetemp)
{
unsigned int month[13]={0,31,59,90,120,151,181,212,243,273,304,334,365}; /*注意溢出*/
unsigned char i;
unsigned int x,extraday=0;
unsigned int unixtimeyear,unixtimemonth,unixtimeday;
unixtimetemp = unixtimetemp + 28800; /*加上北京时间*/
unixtimeyear = unixtimetemp/31536000;
system_clk_temp.Year = 1970+unixtimeyear;
for(x=1970;x<system_clk_temp.Year;x++) /*加上闰年二月多的一天*/
{
if(((x % 4) == 0 && ((x % 100) != 0 || (x % 400) == 0)))
{
extraday++;
}
}
if((((system_clk_temp.Year) % 4) == 0 && (((system_clk_temp.Year) % 100) != 0 || ((system_clk_temp.Year) % 400) == 0)))
{
for(i=2;i<12;i++)
{
month[i] = month[i] + 1;
}
}
unixtimeday = unixtimetemp%31536000/86400 - extraday;
printf("%d\n",unixtimeday);
for(i=0;i<12;i++)
{
if((unixtimeday>=month[i])&&(unixtimeday<month[i+1]))
{
system_clk_temp.Month = i+1;
printf("%d\n",system_clk_temp.Month);
system_clk_temp.Day = unixtimeday - month[i]+1;
}
}
system_clk_temp.Hour = unixtimetemp%86400/3600;
system_clk_temp.Minute = unixtimetemp%3600/60;
system_clk_temp.Second = unixtimetemp%60;
}
long int localtime_to_unixtime()
{
unsigned int month[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
long int unixtimetemp,unixtimeday,unixtimehour;
unsigned char i;
unsigned int x,extraday=0;
unsigned int unixtimeyear;
unsigned char unixtimemonth;
for(x=1970;x<system_clk_temp.Year;x++) /*加上闰年二月多的一天*/
{
if(((x % 4) == 0 && ((x % 100) != 0 || (x % 400) == 0)))
{
extraday++;
}
}
unixtimeyear = system_clk_temp.Year - 1970;
printf("%d\n",unixtimeyear);
if((((system_clk_temp.Year) % 4) == 0 && (((system_clk_temp.Year) % 100) != 0 || ((system_clk_temp.Year) % 400) == 0)))
{
for(i=2;i<12;i++)
{
month[i] = month[i] + 1;
}
}
unixtimemonth = system_clk_temp.Month;
unixtimehour = system_clk_temp.Hour;
printf("%d\n",month[unixtimemonth-1]);
unixtimeday = unixtimeyear*365 + month[unixtimemonth-1] + system_clk_temp.Day-1 + extraday;
printf("%d\n",unixtimeday);
/*修改system_clk_temp.Hour-8可能导致变成负数的问题,原来为“(system_clk_temp.Hour-8)*3600”*/
/*ZG20080126 修改system_clk_temp.Hour*3600可能导致数据溢出的问题,现在改为(unixtimehour)*3600*/
unixtimetemp = unixtimeday*86400 + (unixtimehour)*3600-28800+system_clk_temp.Minute*60 + system_clk_temp.Second;
printf("%c\n%ld\n",'@',unixtimetemp);
return(unixtimetemp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -