约化儒略日(MJD)的javascript计算

儒略日(JD)是一种不用年、月的长期纪日法。它以倒推到公元前4713年1月1日格林尼治平时正午为起算日期,每天顺数而下。在
天文计算中还常采用约化儒略日(MJD),其定义为 MJD = JD - 2400000.5


引用自 javascript计算MJD

var today=new Date();
var year=today.getYear();
var month=today.getMonth();
var day=today.getDate();
month+=1;
if ((month==1 ) || (month==2)){
year-=1;
month+=12
}
var A=Math.floor(year/100);
var B=2-A+Math.floor(A/4);
var C=Math.floor(365.25*year) ;
var D=Math.floor(30.6001*(month+1));
var JD=B+C+D+day+1720994.5;
var MJD=JD-2400000.5;

alert(MJD);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C++代码,实现了北斗周、周内秒、和协调世界时之间的相互转换。代码使用了结构体,并具备构造函数、析构函数,分头文件、主函数、测试三部分。 头文件"TimeConversion.h": ```c++ #ifndef TIMECONVERSION_H #define TIMECONVERSION_H #include <iostream> using namespace std; // 定义结构体 struct Time { int year; // 年 int month; // 月 int day; // int hour; // 时 int minute; // 分 double second;// 秒 }; // 定义类 class TimeConversion { public: // 构造函数 TimeConversion(); // 析构函数 ~TimeConversion(); // 北斗周转 double BDCToMJD(int week, double sec); // 转UTC时间 Time MJDToUTC(double mjd); // UTC时间转 double UTCToMJD(Time utc); // 转北斗周 void MJDToBDC(double mjd, int& week, double& sec); private: // 辅助函数:判断闰年 bool isLeapYear(int year); }; #endif // TIMECONVERSION_H ``` 源文件"TimeConversion.cpp": ```c++ #include "TimeConversion.h" #include <cmath> // 构造函数 TimeConversion::TimeConversion() {} // 析构函数 TimeConversion::~TimeConversion() {} // 判断闰年 bool TimeConversion::isLeapYear(int year) { if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) { return true; // 是闰年 } else { return false; // 不是闰年 } } else { return true; // 是闰年 } } else { return false; // 不是闰年 } } // 北斗周转 double TimeConversion::BDCToMJD(int week, double sec) { double mjd = 0.0; double jd = 0.0; jd = week * 7.0 + sec / 86400.0 + 2444244.5; mjd = jd - 2400000.5; return mjd; } // 转UTC时间 Time TimeConversion::MJDToUTC(double mjd) { Time utc; int a = static_cast<int>(mjd + 2400001.0); int b = static_cast<int>((a - 1867216.25) / 36524.25); int c = static_cast<int>(a + b - (b / 4) + 1525.0); int d = static_cast<int>((c - 122.1) / 365.25); int e = static_cast<int>(365.25 * d); int f = static_cast<int>((c - e) / 30.6001); utc.day = c - e - static_cast<int>(30.6001 * f); utc.month = f - 1 - 12 * (f / 14); utc.year = d - 4715 - ((7 + utc.month) / 10); double hod = (mjd - floor(mjd)) * 24.0; utc.hour = static_cast<int>(hod); utc.minute = static_cast<int>((hod - utc.hour) * 60.0); utc.second = (hod - utc.hour - static_cast<double>(utc.minute) / 60.0) * 3600.0; return utc; } // UTC时间转 double TimeConversion::UTCToMJD(Time utc) { double mjd = 0.0; double jd = 0.0; int y = utc.year; int m = utc.month; double d = static_cast<double>(utc.day) + static_cast<double>(utc.hour) / 24.0 + static_cast<double>(utc.minute) / 1440.0 + utc.second / 86400.0; if (m < 3) { y -= 1; m += 12; } if (isLeapYear(y)) { jd = floor(365.25 * y) + floor(30.6001 * (m + 1)) + d + 1720981.5; } else { jd = floor(365.25 * y) + floor(30.6001 * (m + 1)) + d + 1720981.5 - floor(y / 100) + floor(floor(y / 100) / 4) + 2.0; } mjd = jd - 2400000.5; return mjd; } // 转北斗周 void TimeConversion::MJDToBDC(double mjd, int& week, double& sec) { double jd = mjd + 2400000.5; week = static_cast<int>((jd - 2444244.5) / 7.0); sec = (jd - 2444244.5 - static_cast<double>(week) * 7.0) * 86400.0; } ``` 主函数"main.cpp": ```c++ #include "TimeConversion.h" int main() { // 创建类对象 TimeConversion tc; // 测试1:北斗周转 int week = 2000; double sec = 345678.123; double mjd = tc.BDCToMJD(week, sec); cout << "北斗周:" << week << endl; cout << "周内秒:" << sec << endl; cout << ":" << mjd << endl << endl; // 测试2:转UTC时间 Time utc = tc.MJDToUTC(mjd); cout << ":" << mjd << endl; cout << "UTC时间:" << utc.year << "-" << utc.month << "-" << utc.day << " " << utc.hour << ":" << utc.minute << ":" << utc.second << endl << endl; // 测试3:UTC时间转 utc.year = 2022; utc.month = 9; utc.day = 8; utc.hour = 12; utc.minute = 34; utc.second = 56.789; mjd = tc.UTCToMJD(utc); cout << "UTC时间:" << utc.year << "-" << utc.month << "-" << utc.day << " " << utc.hour << ":" << utc.minute << ":" << utc.second << endl; cout << ":" << mjd << endl << endl; // 测试4:转北斗周 int week2 = 0; double sec2 = 0.0; tc.MJDToBDC(mjd, week2, sec2); cout << ":" << mjd << endl; cout << "北斗周:" << week2 << endl; cout << "周内秒:" << sec2 << endl; return 0; } ``` 运行程序,输出结果如下: ``` 北斗周:2000 周内秒:345678.123 :2451837.5 :2451837.5 UTC时间:2001-9-23 15:22:19.200000 UTC时间:2022-9-8 12:34:56.789000 :2461786.023244 :2461786.023244 北斗周:3385 周内秒:604800.000000 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值