C语言:Unix时间戳-转-UTC时间
C语言:UTC时间-转-Unix时间戳
一、简介
1. Unix时间戳
Unix系统内记录的时间是一个时间戳,所谓时间戳,就是当前时间距离1970年1月1日0时0分0秒经过的总秒数。
2. UTC时间
协调世界时,又称世界统一时间、世界标准时间、国际协调时间。
由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
北京在东八区,所以:北京时间=UTC+8h。
二、Unix时间戳-转-UTC时间——C语言实现
具体程序代码如下:
#include <stdio.h>
//UTC时间结构体
typedef struct
{
int year;
int mon;
int day;
int hour;
int min;
int sec;
} utctime ;
utctime Unix_Utctime(unsigned int Unix_sec)
{
int year=1970,mon=0,day=0,tday=0;
day = Unix_sec/(24*60*60);
while(day >= 365)
{
if((year%400==0)||((year%4==0)&&(year%100!=0))) {day-=366;}
else {day-=365;}
year++;
}
for(mon=1;mon<13;mon++)
{
tday = day;
switch(mon)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day-=31;
break;
case 4:
case 6:
case 9:
case 11:day-=30;
break;
case 2:if((year%400==0)||((year%4==0)&&(year%100!=0))) { day-=29;}
else { day-=28;}
break;
}
if(day < 0)
{
day = tday;
break;
}
}
utctime tmp;
tmp.year = year;
tmp.mon = mon;
tmp.day = day+1;
tmp.hour = Unix_sec%(24*60*60)/(60*60);
tmp.min = Unix_sec%(24*60*60)%(60*60)/60;
tmp.sec = Unix_sec%(24*60*60)%(60*60)%60;
return tmp;
}
int main(int argc, char *argv[])
{
utctime tmp;
unsigned int tdata=832763594;
tmp=Unix_Utctime(tdata);
printf("Unix时间戳:%d\n",tdata);
printf("UTC时间: %4d-%02d-%02d %02d:%02d:%02d\n",
tmp.year, tmp.mon, tmp.day, tmp.hour, tmp.min, tmp.sec);
tmp=Unix_Utctime(tdata+8*60*60);//北京时间+8小时
printf("北京时间:%4d-%02d-%02d %02d:%02d:%02d\n",
tmp.year, tmp.mon, tmp.day, tmp.hour, tmp.min, tmp.sec);
return 0;
}
程序运行结果如下:
Unix时间戳: 832763594
UTC时间: 1996-05-22 11:13:14
北京时间: 1996-05-22 19:13:14