您的位置:首页 > 其它

unix系统时间转换程序

2010-05-29 00:29 363 查看
unix纪元

描述
在著名的unix系统中,使用了一种简洁高效的时间表示方法,即:
将1970年1月1日0点作为“unix纪元”的原点,从1970年1月1日开始经过的秒数存储为一个32位整数

请编写一个程序,帮助把一个unix时间辍,转换成形如"YYYY-mm-dd HH:ii:ss"的格式,其中的字母分别代表
YYYY 4 位数字完整表示的年份
mm 数字表示的月份,有前导零的 2 位数字
dd 月份中的第几天,有前导零的2位数字
HH 小时,24 小时格式,有前导零
ii 有前导零的分钟数
ss 秒数,有前导零

输入
输入数据有若干行,每行包含一个整数t,(0<=t<2^31)

输出
对每一行输入数据,输出一行,为形如“YYYY-mm-dd HH:ii:ss”格式的时间

样例输入
10
1234567890

样例输出1970-01-01 00:00:10
2009-02-13 23:31:30

我的程序
#include<cstdio>
int  isLeapyear(int n)
{
return (n % 100 == 0 )? (n % 400 == 0) :(n % 4 == 0);
}
int main(void)
{
int leapYearDays = 366;
int nonleapYearDays = 365;
int year,month,day,hour = 0,minute = 0,second = 0;
int n,i,k,flag;
int dayOfmonth[2][12] ={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
scanf("%d",&n);

second = n % 60;
minute = n / 60 % 60;
hour = n / 60 / 60 % 24;

day = n / (24 * 60 * 60);
year = 1970;

while(day > 366)
{
isLeapyear(year) ? day -= leapYearDays : day -= nonleapYearDays;
year++;
}
if(day == 365 && ~isLeapyear(year))
{
day = 0;
month = 1;
year += 1;
}

flag = isLeapyear(year);
month = 1;
for(i = 0;i<=11;i++)
{
if(day > 0)
{
if(day - dayOfmonth[flag][i] > 0)
{
month += 1;
day -= dayOfmonth[flag][i];
}
}
}
day += 1; // day start from 1;
printf("%d-%02d-%02d   %02d:%02d:%02d/n",year,month,day,hour,minute,second);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unix 存储