1970年以来的秒转换为具体日期时间

xiaoxiao2021-02-28  19

输入: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; }

转载请注明原文地址: https://www.6miu.com/read-2100014.html

最新回复(0)