输入:0时区的标准秒数
输出:东8区的具体日期时间
struct TimeDetail
{
unsigned short day;
unsigned short hour;
unsigned short minute;
unsigned short second;
};
struct DateTimeDetail
{
unsigned short year;
unsigned short month;
unsigned short day;
unsigned short hour;
unsigned short minute;
unsigned short second;
};
//秒转换为天,时,分,秒
TimeDetail CommonFunction::getTimeDetailByInt(unsigned int time)
{
TimeDetail detail = { 0, 0, 0, 0 };
detail.day = (int)(time / oneDaySeconds);
time -= detail.day * oneDaySeconds;
detail.hour = (int)(time / oneHourSeconds);
time -= detail.hour * oneHourSeconds;
detail.minute = (int)(time / oneMinuteSeconds);
detail.second = time - detail.minute * oneMinuteSeconds;
return detail;
}
//秒转换为年,月,日,时,分,秒
DateTimeDetail CommonFunction::getCurrentSystemDateTime(unsigned int time)
{
TimeDetail timeDetail = getTimeDetailByInt(time);
DateTimeDetail dateTimeDetail;
dateTimeDetail.year = 1970;
dateTimeDetail.month = 1;
dateTimeDetail.day = 1;
dateTimeDetail.hour = timeDetail.hour + 8;//时区导致
dateTimeDetail.minute = timeDetail.minute;
dateTimeDetail.second = timeDetail.second;
int daysLeft = timeDetail.day;
int daysOfYear;
while (daysLeft > 0)
{
if ((((dateTimeDetail.year % 4) == 0) && (dateTimeDetail.year % 100) != 0) || (dateTimeDetail.year % 400 == 0))
daysOfYear = 366;
else
daysOfYear = 365;
if (daysLeft < daysOfYear)
{
int daysOfMonth;
while (daysLeft > 0)
{
switch (dateTimeDetail.month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
daysOfMonth = 31;
break;
case 4:case 6:case 9:case 11:
daysOfMonth = 30;
break;
case 2:
daysOfMonth = (daysOfYear == 365) ? 28 : 29;
default:
break;
}
if (daysLeft < daysOfMonth)
{
dateTimeDetail.day = daysLeft + 1;
daysLeft = 0;
}
else
{
daysLeft -= daysOfMonth;
dateTimeDetail.month++;
}
}
}
else
{
daysLeft -= daysOfYear;
dateTimeDetail.year++;
}
}
return dateTimeDetail;
}