summaryrefslogtreecommitdiffstats
path: root/src/Julian.cpp
diff options
context:
space:
mode:
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