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<iostream>
using namespace std;
int t;
void time(int x)//判断年月日
{
	int year = 0,month=0;
	int day = x;
	int Month[13] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };
	for (int i = 1970;; ++i) {//依次尝试能否过完这一年
		bool flag = 1;
		if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
			if (day >= 366) {
				flag = 0;
				++year;
				day -= 366;
			}
		}
		else {
			if (day >= 365) {
				flag = 0;
				++year;
				day -= 365;
			}
		}
		if (flag)break;
	}
	int i = 1970 + year;
	if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
		Month[2] = 29;
	}
	for (int i = 1;; ++i) {//依次尝试能否过完这月
		if (day >= Month[i]) {
			++month;
			day -= Month[i];
		}
		else break;
	}
	printf("%d-%02d-%02d ", year+1970, month+1, day+1);//输出前导0!
}
int main()
{
	while (cin >> t) {
		int days, year, h, m, s;//求时分秒
		days = t / 86400;
		t %= 86400;
		h = t / 3600;
		t %= 3600;
		m = t / 60;
		s = t % 60;
		time(days);
		printf("%02d:%02d:%02d\n", h, m, s);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值