summaryrefslogtreecommitdiffstats
path: root/src/Julian.cpp
diff options
context:
space:
mode:
authorWe-unite <3205135446@qq.com>2023-09-15 23:21:24 +0800
committerWe-unite <3205135446@qq.com>2023-09-15 23:21:24 +0800
commit27772ba64bb8f49a9d9057acaed2e08d0f7cec68 (patch)
tree0d485cef6b6c8e8eb5b7413361dd885dd5028e79 /src/Julian.cpp
parenta4aabf441f55395a73bbfb48bfee7b1bdbd49825 (diff)
downloadcalendar-27772ba64bb8f49a9d9057acaed2e08d0f7cec68.tar.gz
calendar-27772ba64bb8f49a9d9057acaed2e08d0f7cec68.zip
Formalized this program.
- Make src dir, put all code into it. - Devide old source code into several parts of files with makefile. - Delete some useless files.
Diffstat (limited to 'src/Julian.cpp')
-rw-r--r--src/Julian.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/Julian.cpp b/src/Julian.cpp
new file mode 100644
index 0000000..1d3c4b7
--- /dev/null
+++ b/src/Julian.cpp
@@ -0,0 +1,89 @@
1#include "calendar.h"
2
3double Julian::d[23][5]={
4 {-4000, 108371.700000, -13036.800000, 392.000000, 0.000000},
5 { -500, 17201.000000, -627.820000, 16.170000, -0.341300},
6 { -150, 12200.600000, -346.410000, 5.403000, -0.159300},
7 { 150, 9113.800000, -328.130000, -1.647000, 0.037700},
8 { 500, 5707.500000, -391.410000, 0.915000, 0.314500},
9 { 900, 2203.400000, -283.450000, 13.034000, -0.177800},
10 { 1300, 490.100000, -57.350000, 2.085000, -0.007200},
11 { 1600, 120.000000, -9.810000, -1.532000, 0.140300},
12 { 1700, 10.200000, -0.910000, 0.510000, -0.037000},
13 { 1800, 13.400000, -0.720000, 0.202000, -0.019300},
14 { 1830, 7.800000, -1.810000, 0.416000, -0.024700},
15 { 1860, 8.300000, -0.130000, -0.406000, 0.029200},
16 { 1880, -5.400000, 0.320000, -0.183000, 0.017300},
17 { 1900, -2.300000, 2.060000, 0.169000, -0.013500},
18 { 1920, 21.200000, 1.690000, -0.304000, 0.016700},
19 { 1940, 24.200000, 1.220000, -0.064000, 0.003100},
20 { 1960, 33.200000, 0.510000, 0.231000, -0.010900},
21 { 1980, 51.000000, 1.290000, -0.026000, 0.003200},
22 { 2000, 63.870000, 0.100000, 0.000000, 0.000000},
23 { 2005, 64.700000, 0.210000, 0.000000, 0.000000},
24 { 2012, 66.800000, 0.220000, 0.000000, 0.000000},
25 { 2018, 69.000000, 0.360000, 0.000000, 0.000000},
26 { 2028, 72.600000, 0.000000, 0.000000, 0.000000}
27};
28
29double Julian::dt_ext(int y,double jsd)
30{
31 double dy=(double)(y-1820)/100.0;
32 return -20+jsd*dy*dy;
33}
34
35//计算力学时与世界时之差,传入年份
36double Julian::delta_t(int y)
37{
38 int y0=d[22][0];//表中最后一行的年份
39 double t0=d[22][1];//表中最后一行的delta_t
40 double jsd;
41
42 if(y>y0)
43 {
44 jsd=31;
45 if(y-y0>100)
46 {
47 return dt_ext(y,jsd);
48 }
49
50 double v=dt_ext(y,jsd);
51 double dv=dt_ext(y0,jsd)-t0;
52 return v-dv*(y0+100-y)/100;
53 }
54
55 double res;
56 for(int i=0;i<22;i++)
57 {
58 if(y<d[i+1][0])
59 {
60 break;
61 }
62 double t1=(y-d[i][0])/(d[i+1][0]-d[i][0])*10;
63 double t2=t1*t1;
64 double t3=t2*t1;
65 res=d[i][1]+d[i][2]*t1+d[i][3]*t2+d[i][4]*t3;
66 }
67 return res;
68}
69// 计算儒略日
70double Julian::getJulianDay(time_t time)
71{
72 double t=(double)time;
73 return (double)t/86400.0+2440587.5;
74}
75
76// 计算儒略千年数
77double Julian::getJulianKiloYear(time_t time)
78{
79 double jd = getJulianDay(time);
80 return (double)(jd-2451545.0)/365250.0;
81}
82
83//儒略千年数转时间戳
84time_t Julian::kiloYearToTime(double t,int year)
85{
86 double jd=t*365250.0+2451545.0;
87 time_t time=(time_t)((jd-2440587.5)*86400.0-delta_t(year));
88 return time;
89}