年积日转年月日

// 年积日转年月日
function isLeapYear(year) {
  var ret = false;
  year = parseInt(year)
  if (((0 == (year % 4)) && (0 != (year % 100))) || (0 == (year % 400))) {
    ret = true;
  } else {
    ret = false;
  }
  return ret;
}

function day2date(daytime) {
  var monthDay_common = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
  var monthDay_leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];
  var monthDay;
  var month = 0;
  var day = 0;

  var year = daytime.substr(0, 4);
  var time_DD = daytime.substr(4, 3);
  var hour = daytime.substr(7, 2);
  var minute = daytime.substr(9, 2);
  
  var leapYear = isLeapYear(year)
  if (leapYear) {
    monthDay = monthDay_leap
  } else {
    monthDay = monthDay_common
  }

  for (month = 0; month < 12; month++) {
    if (monthDay[month] >= time_DD) {
      break;
    }
  }

  day = time_DD - monthDay[month - 1];
  var date = year + '-' + month + '-' + day + ' ' + hour + ':' + minute;
  return date;
}

day2date('201928501002505')

 

#include <iostream> #include <cmath> #include <tuple> // 闰判断函数 bool isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 计算年月日 -> ) int ymdToDoy(int year, int month, int day) { const int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (isLeapYear(year)) daysInMonth[2] = 29; int doy = day; for (int m = 1; m < month; ++m) { doy += daysInMonth[m]; } return doy; } // 年月日 -> 年月日) std::tuple<int, int, int> doyToYmd(int year, int doy) { const int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (isLeapYear(year)) daysInMonth[2] = 29; int month = 1; while (doy > daysInMonth[month]) { doy -= daysInMonth[month]; ++month; } return {year, month, doy}; } // 计算儒略(简化算法,适用于公元后期) long julianDay(int year, int month, int day) { if (month < 3) { year -= 1; month += 12; } return day + (153 * month - 457) / 5 + 365 * year + year / 4 - year / 100 + year / 400 + 1721119; } // GPS周计算(GPS起始时间:1980-01-06) int gpsWeek(int year, int month, int day) { const long gpsStart = julianDay(1980, 1, 6); long currentJD = julianDay(year, month, day); return static_cast<int>((currentJD - gpsStart) / 7); } // GPS秒计算(假设无闰秒) long gpsSeconds(int year, int month, int day, int hour=0, int min=0, int sec=0) { const long gpsStartJD = julianDay(1980, 1, 6); long currentJD = julianDay(year, month, day); long daysDiff = currentJD - gpsStartJD; return daysDiff * 86400L + hour*3600 + min*60 + sec; } int main() { // 示例用法 std::cout << "2024是闰吗?" << isLeapYear(2024) << "\n"; auto [y, m, d] = doyToYmd(2024, 60); std::cout << "2024第60天是:" << y << "-" << m << "-" << d << "\n"; std::cout << "儒略(2024-02-29):" << julianDay(2024, 2, 29) << "\n"; std::cout << "GPS周(2023-05-01):" << gpsWeek(2023, 5, 1) << "\n"; std::cout << "GPS秒(2023-05-01 00:00:00):" << gpsSeconds(2023, 5, 1) << "\n"; return 0; }报错68 10 C:\Users\黄皓\Desktop\未命名1.cpp [Warning] structured bindings only available with '-std=c++17' or '-std=gnu++17'对代码进行修改
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值