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

题目:根据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;
}

猜你喜欢

转载自blog.csdn.net/prefect_boy/article/details/77800077