summaryrefslogtreecommitdiffstats
path: root/src/Julian.cpp
diff options
context:
space:
mode:
authorWe-unite <3205135446@qq.com>2023-10-04 01:27:34 +0800
committerWe-unite <3205135446@qq.com>2023-10-17 13:54:06 +0800
commitb6ea7502c67af360b309c6c296fe487fa3bf5d96 (patch)
tree93690b000515e3c0cc3fc8b252b8414114b31c83 /src/Julian.cpp
parent27772ba64bb8f49a9d9057acaed2e08d0f7cec68 (diff)
downloadcalendar-b6ea7502c67af360b309c6c296fe487fa3bf5d96.tar.gz
calendar-b6ea7502c67af360b309c6c296fe487fa3bf5d96.zip
输入年份,对去年十一月晦至今年十一月晦的节气和朔日计算排序
输入年份可进行节气与朔日排序 Moon longitude finishing. Sth is wrong with EI in moon longitude. Successfully fixed the bug with EI & make sure the ShuoRi 节气与月份初步结合,给定年份可确认该年前后之节气与朔日 节气与朔日排序完成 Makefile added. 判断本年(两个冬至之间)是否置闰 时间节点存储与排序由vector改用链表 正确置闰。现测算起止为去年十二月朔至今年十一月晦 2025年冬至之后朔日计算有误,等待修正 2025年十一月朔在12.20,冬至12.21,在函数ShuoRi()里没有计算十二月朔 错误修复,1900-2100测试朔日/节气无误 链表改用单独的类实现。测试成功。 补充注释。执行平均时长由1.75s增长到2.05s 所有文件I/O获得的参数全部写入parameters.h,测试成功,总时间17s 忘记上传测试脚本test.sh了,补上
Diffstat (limited to 'src/Julian.cpp')
-rw-r--r--src/Julian.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/Julian.cpp b/src/Julian.cpp
index 1d3c4b7..907c94e 100644
--- a/src/Julian.cpp
+++ b/src/Julian.cpp
@@ -1,5 +1,14 @@
1#include "calendar.h" 1#include "calendar.h"
2 2
3/* 需要注意的是日期与儒略日数的转换
4 * 儒略日/世纪数/千年数不是以日计算的,而是准确到具体时刻
5 * 因而不使用整数
6 * 一般地是采用公式,但不注意的话会有数据类型的问题
7 * 这里方便起见采用Unix时间戳,即计算机系统提供的从1970年1月1日0时到指定时刻的秒数
8 * Unix时间戳规定为32位整数,因而最大值为2038年1月19日3时14分7秒,最小值为1901年12月13日20时45分52秒
9 * 但是我目前提供的中time_t类型为64位整数,因而可以表示数千年的时间范围
10 */
11
3double Julian::d[23][5]={ 12double Julian::d[23][5]={
4 {-4000, 108371.700000, -13036.800000, 392.000000, 0.000000}, 13 {-4000, 108371.700000, -13036.800000, 392.000000, 0.000000},
5 { -500, 17201.000000, -627.820000, 16.170000, -0.341300}, 14 { -500, 17201.000000, -627.820000, 16.170000, -0.341300},
@@ -66,17 +75,20 @@ double Julian::delta_t(int y)
66 } 75 }
67 return res; 76 return res;
68} 77}
78
69// 计算儒略日 79// 计算儒略日
70double Julian::getJulianDay(time_t time) 80double Julian::getJulianDay(time_t time)
71{ 81{
72 double t=(double)time; 82 double t=(double)time;
83 //2440587.5为1970年1月1日0时的儒略日数
73 return (double)t/86400.0+2440587.5; 84 return (double)t/86400.0+2440587.5;
74} 85}
75 86
76// 计算儒略千年数 87// 计算儒略千年数,自JD2000(即2000年1月1日12时)起算
77double Julian::getJulianKiloYear(time_t time) 88double Julian::getJulianKiloYear(time_t time)
78{ 89{
79 double jd = getJulianDay(time); 90 double jd = getJulianDay(time);
91 //2451545.0为2000年1月1日12时的儒略日数,365250.0为一千年的天数
80 return (double)(jd-2451545.0)/365250.0; 92 return (double)(jd-2451545.0)/365250.0;
81} 93}
82 94