C语言编程1970年1月1日0时0分0秒,输入N秒,要求打印X年X月X日X时X分X秒.

题目如上 编程器是 Microsoft visual c++6.0

#include <stdio.h>
#include <time.h>
void main()
{
time_t time_last;
time_last = time(NULL);

printf("%ld\n",time_last); //得到1970年到现在的秒数

unsigned long v;
while(1) //方便测试,一直可以输入
{

scanf("%ld",&v);
v = v+60*60*8; //我们位于东八区
int d = v/(60*60*24)+1; //得到距离1970年1月1日到输入秒数的天数
int n = (d+671)/1461; //求中间过了多少个2月29日
int year = (d-n)/365+1970; //得到年份
if((d-n)%365 == 0)
{
year = year -1;
}
int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //定义月份天数表

if((year%400==0)||(year%4==0&&year%100!=0)) //判断平年闰年
{
m[2] = 29;
}
else
{
m[2] = 28;
}

int i;
int da = d - (d-n)/365*365-n; //减去该年前的前天,得到该年的第几天

int month,day;
for(i=0;i<12;i++)
{

if(da > m[i])
{
da = da - m[i]; //让天数减去每月的天数
}

if(da == 0)
{
month = i+1;
day = m[i+1];
}

if(da <= m[i+1] && da != 0) //如果得到小于或等于该月的天数,则可以确定为哪一天
{
month = i+1;
day = da;
break; //确定之后跳出循环
}
}
printf("%d-%d-%d\n",year,month,day);
int hour,minute,second;
hour = v%(3600*24)/3600;
minute = v%3600/60;
second = v%60;
printf("%d:%d:%d\n",hour,minute,second);

}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-05
1970年1月1日 0点 是 “UNIX时间戳” 的起点, 用<time.h>里面的函数进行处理,是很简单的。

http://www.epochconverter.com/programming/functions-c.php
这个是用C语言显示当前时间的程序,你参考一下吧。
第2个回答  2013-11-04
#include<stdio.h>
void main()
{
int n;
int month;
int day;
int hour;
int min;
int s;
printf("从1970年1月1日0时0分0秒,又过去了几秒");
scanf("%d",&n);
day=n/(60*60*24);
n=n%(60*60*24);
hour=n/(60*60);
n=n%(60*60);
min=n/(60);
s=n%(60);
n=day;
int m=n/(365+365+365+366);
n=n%(365+365+365+366);
int j=n/(365);
n=n%(365);
if(j==2)
{
if(n<=31) month=1;else
if(n<=60) month=2;else
if(n<=91) month=3;else
if(n<=121) month=4;else
if(n<=152) month=5;else
if(n<=182) month=6;else
if(n<=213) month=7;else
if(n<=244) month=8;else
if(n<=274) month=9;else
if(n<=305) month=10;else
if(n<=335) month=11;else
if(n<=366) month=12;
}
else{
if(n<=31) month=1;else
if(n<=59) month=2;else
if(n<=90) month=3;else
if(n<=120) month=4;else
if(n<=151) month=5;else
if(n<=181) month=6;else
if(n<=212) month=7;else
if(n<=243) month=8;else
if(n<=273) month=9;else
if(n<=304) month=10;else
if(n<=334) month=11;else
if(n<=365) month=12;
}
printf("%d年%d月%d日%d小时%d分%d秒",1970+4*m+j,month,day+1,hour,min,s);
}
相似回答