题目:根据Unix时间戳计算时间,不分大小月,每月30天,每年按360天计算,开始时间为1970/01/01 00:00:00 输入秒数,显示时间。
举例:输入10,输出1970/01/01 00:00:10
输入12345678 输出 1970/05/23 21:21:18
方法一:进位,60秒进1分钟,60分进1小时,24小时进1天,30天进1月,12月进1年,依次建立循环
代码:
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
string CalculationDate(long long second)
{
int year = 1970;
int month = 1;
int day = 1;
int hour = 0;
int minute = 0;
while (second>60)
{
second -= 60;
minute += 1;
if (minute == 60)
{
hour += 1;
minute = 0;
if (hour == 24)
{
day += 1;
hour = 0;
if (day == 31)
{
month += 1;
day = 1;
if (month == 13)
{
year += 1;
month = 1;
}
}
}
}
}
char buff[] = "1970/01/01 00:00:00";
sprintf(buff, "%d/%02d/%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
return buff;
}
int main()
{
cout << CalculationDate(12345678) << endl;
system("pause");
return 0;
}
方法二:取整,一年多少秒,一月多少秒,以此类推,依次取年、月、日…
代码:
string CalculationDate(long long second)
{
int year = 1970;
int month = 1;
int day = 1;
int hour = 0;
int minute = 0;
long long minuteSecond = 60;
long long hourSecond = 60 * minuteSecond;
long long daySecond = 24 * hourSecond;
long long monthSecond = 30 * daySecond;
long long yearSecond = 12 * monthSecond;
if (second > yearSecond)
{
int x = second / yearSecond;
year += x;
second -= x*yearSecond;
}
if (second > monthSecond)
{
int x = second / monthSecond;
month += x;
second -= x*monthSecond;
}
if (second > daySecond)
{
int x = second / daySecond;
day += x;
second -= x*daySecond;
}
if (second > hourSecond)
{
int x = second / hourSecond;
hour += x;
second -= x*hourSecond;
}
if (second > minuteSecond)
{
int x = second / minuteSecond;
minute += x;
second -= x*minuteSecond;
}
char buff[] = "1970/01/01 00:00:10";
sprintf(buff, "%d/%02d/%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
return buff;
}