【c++】面试题:----根据Unix时间戳计算时间

来源:互联网 发布:win7仿mac dock栏 编辑:程序博客网 时间:2024/05/18 05:58

题目:根据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;}
原创粉丝点击