用time(0)可以得到从格林尼治标准时间1970.1.1 00:00:00到当前时刻所流逝的总秒数
#include <iostream>
#include <cstdio>
using namespace std;
bool if_leap(int y);
void find_Date(int t, int& y, int& m, int& d, int& hour, int& minute, int& second);
int mon[13] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };
int main()
{
int year = 1970, month = 1, day = 1, hour = 0, minute = 0, second = 0;
char monthDay[13][5] = {"","Jan","Feb" ,"Mar" ,"Apr" ,"May" ,"Jun" ,"Jul" ,"Aug" ,"Seq" ,"Oct" ,"Nov" ,"Dec"};
int t = time(0); //获取从1970年1月1日零点到现在多少秒
find_Date(t, year, month, day, hour, minute, second);
cout << "Current Time(GMT): ";
printf("%d-%s-%02d,%02d:%02d:%02d", year, monthDay[month], day, hour, minute, second);
return 0;
}
void find_Date(int t, int& y, int& m, int& d, int& hour, int& minute, int& second)
{
int day_seconds = 24 * 3600;//每一天的秒数,86400
int day_add = t / day_seconds; //距离今天的天数
while (day_add > 365) //算年份
{
if (if_leap(y)) //是闰年,-366天
day_add -= 366;
else
day_add -= 365;
y++;
}
if (if_leap(y)) mon[2] = 29;
while (day_add >= mon[m]) //同理,算月份
{
day_add -= mon[m++];
}
d = day_add + 1;//day_add是指从1970年1月1日开始增加的天数,所以要+1
int sec = t % day_seconds; //具体一天过去了多少秒
second = sec % 60; //当前秒
minute = sec / 60 % 60; //分
hour = sec / (60 * 60) + 8; //时(UTC时间要加时区8,考试的话应该不用,GMT就行,其实要求的也是GMT)
}
bool if_leap(int y) //判断是否是闰年
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return true;
return false;
}
UTC时间、GMT时间、CST时间(北京时间)、时间戳_utc时间戳-CSDN博客