diff options
Diffstat (limited to 'src/Julian.cpp')
-rw-r--r-- | src/Julian.cpp | 14 |
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 | |||
3 | double Julian::d[23][5]={ | 12 | double 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 | // 计算儒略日 |
70 | double Julian::getJulianDay(time_t time) | 80 | double 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时)起算 |
77 | double Julian::getJulianKiloYear(time_t time) | 88 | double 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 | ||