🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
JulianDate.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "Duration.hpp"
25#include "AstUtil/Constants.h"
26
27AST_NAMESPACE_BEGIN
28
35class JulianDate;
36class Date;
37class Time;
38class DateTime;
39
40
41
43AST_CORE_CAPI void aJDToMJD(const JulianDate& jd, ModJulianDate& mjd);
44
45
47AST_CORE_CAPI void aMJDToJD(const ModJulianDate& mjd, JulianDate& jd);
48
49
52AST_CORE_API ImpreciseMJD aJDToMJD_Imprecise(ImpreciseJD jd);
53
54
57AST_CORE_API ImpreciseMJD aJDToMJD_Imprecise(const JulianDate& jd);
58
59
62AST_CORE_API ImpreciseJD aMJDToJD_Imprecise(ImpreciseMJD mjd);
63
64
67AST_CORE_API ImpreciseJD aMJDToJD_Imprecise(const ModJulianDate& mjd);
68
69
71AST_CORE_API void aMJDToJD_Imprecise(ImpreciseMJD mjd, JulianDate& jd);
72
73
75AST_CORE_CAPI void aDateTimeToJD(const DateTime& dttm, JulianDate& jd);
76
77
79AST_CORE_CAPI void aJDToDateTime(const JulianDate& jd, DateTime& dttm);
80
81
86{
87public:
90 static JulianDate FromImpreciseDay(double day){
91 int d = static_cast<int>(day);
92 double second = (day - d) * 86400.0;
93 return JulianDate::FromDaySecond(d, second);
94 }
95
99 static JulianDate FromDays(double day1, double day2)
100 {
101 int d1 = static_cast<int>(day1);
102 int d2 = static_cast<int>(day2);
103 double second = ((day1 - d1) + (day2 - d2)) * 86400.0;
104 return JulianDate::FromDaySecond(d1 + d2, second);
105 }
106
110 static JulianDate FromDaySecond(int day, double second){
111 return JulianDate{day, second};
112 }
113
117 static JulianDate FromDaySecond(double day, double second)
118 {
119 int d = static_cast<int>(day);
120 double s = (day - d) * 86400.0;
121 return JulianDate{d, second + s};
122 }
123
125 static JulianDate FromDateTime(const DateTime& dttm)
126 {
127 JulianDate jd;
128 aDateTimeToJD(dttm, jd);
129 return jd;
130 }
131
134 return JulianDate::FromDaySecond(static_cast<int>(kJ2000Epoch), 0.0);
135 }
136
138 AST_CORE_API
139 static JulianDate FromDateTime(int year, int month, int day, int hour, int minute, double second);
140public:
143 double impreciseDay() const{return day_ + second_ /86400.;}
144
146 void setImpreciseDay(double jd){
147 int day = static_cast<int>(jd);
148 double second = (jd - day) * 86400.0;
149 setDaySecond(day, second);
150 }
151public:
152 int day() const{return day_;}
153 int& day(){return day_;}
154 double second() const {return second_;}
155 double& second(){return second_;}
156 void setDay(int day){day_ = day;}
157 void setSecond(double sec){second_ = sec;}
158
160 void getDaySecond(int& day, double& second) const{
161 day = day_;
162 second = second_;
163 }
165 void setDaySecond(int day, double second){
166 day_ = day;
167 second_ = second;
168 }
169public:
171 double dayFractional() const{
172 return second_ / kSecondsPerDay;
173 }
175 void setDayFractional(double df){
176 second_ = df * kSecondsPerDay;
177 }
178public:
181 return daysFromJ2000() / kDaysPerJulianCentury;
182 }
184 double daysFromJ2000() const{
185 return daysFromJulianDate(kJ2000Epoch);
186 }
188 double secondsFromJ2000() const{
189 return (day_ - kJ2000Epoch) * kSecondsPerDay + second_;
190 }
192 double daysFromJulianDate(double jd) const
193 {
194 return ((day_ - jd) + dayFractional());
195 }
196
197 double daysFrom(const JulianDate& other) const{
198 return (*this - other).totalDay();
199 }
200public:
201 JulianDate& operator += (double sec)
202 {
203 this->second() += sec; // 适用于任何时间尺度,包括考核闰秒的和不考虑闰秒的
204 return *this;
205 }
206 JulianDate& operator -= (double sec)
207 {
208 this->second() -= sec; // 适用于任何时间尺度,包括考核闰秒的和不考虑闰秒的
209 return *this;
210 }
211 JulianDate operator + (double sec) const
212 {
213 JulianDate jd{ *this };
214 jd += sec;
215 return jd;
216 }
217 JulianDate operator - (double sec) const
218 {
219 JulianDate jd{ *this };
220 jd -= sec;
221 return jd;
222 }
223 DaySecDuration operator - (const JulianDate& other) const
224 {
225 return {day() - other.day(), second() - other.second()};
226 }
227public:
231 JulianDate shiftedBySecond(double second) const{
232 return JulianDate::FromDaySecond(day_, second_ + second);
233 }
234public:
235 int day_; // 天数部分 day part of julian date
236 double second_; // 秒数部分 second part of julia date
237};
238
239
240
243AST_NAMESPACE_END
244
日期时间
定义 DateTime.hpp:418
儒略日
定义 JulianDate.hpp:86
static JulianDate FromDaySecond(double day, double second)
根据天数和秒数创建儒略日
定义 JulianDate.hpp:117
double daysFromJ2000() const
计算儒略日与 J2000.0 历元的天数差
定义 JulianDate.hpp:184
double daysFromJulianDate(double jd) const
计算儒略日与另一个儒略日的天数差
定义 JulianDate.hpp:192
double impreciseDay() const
获取不精确的天数
定义 JulianDate.hpp:143
static JulianDate FromDateTime(const DateTime &dttm)
根据日期时间创建儒略日
定义 JulianDate.hpp:125
double julianCenturyFromJ2000() const
计算儒略日与 J2000.0 历元的时间差(儒略世纪)
定义 JulianDate.hpp:180
double secondsFromJ2000() const
计算儒略日与 J2000.0 历元的时间差(秒)
定义 JulianDate.hpp:188
double dayFractional() const
获取小数部分的日数
定义 JulianDate.hpp:171
static JulianDate FromImpreciseDay(double day)
根据不精确的天数创建儒略日
定义 JulianDate.hpp:90
void setImpreciseDay(double jd)
设置不精确的天数
定义 JulianDate.hpp:146
static JulianDate FromDaySecond(int day, double second)
根据天数和秒数创建儒略日
定义 JulianDate.hpp:110
static JulianDate FromDays(double day1, double day2)
根据天数(分两部分)创建儒略日
定义 JulianDate.hpp:99
JulianDate shiftedBySecond(double second) const
计算儒略日偏移后的新儒略日
定义 JulianDate.hpp:231
static JulianDate J2000()
获取 J2000.0 历元的儒略日
定义 JulianDate.hpp:133
void setDayFractional(double df)
设置小数部分的日数
定义 JulianDate.hpp:175
void setDaySecond(int day, double second)
设置天数和秒数
定义 JulianDate.hpp:165
void getDaySecond(int &day, double &second) const
获取天数和秒数
定义 JulianDate.hpp:160
ImpreciseMJD aJDToMJD_Imprecise(ImpreciseJD jd)
将不精确的儒略日 Julian Date(MJD)转换为不精确的简约儒略日
定义 JulianDate.cpp:53
void aMJDToJD(const ModJulianDate &mjd, JulianDate &jd)
将简约儒略日转换为儒略日
定义 JulianDate.cpp:45
void aDateTimeToJD(const DateTime &dttm, JulianDate &jd)
将日期时间转换为儒略日
定义 JulianDate.cpp:83
ImpreciseJD aMJDToJD_Imprecise(ImpreciseMJD mjd)
将不精确的简约儒略日Modified Julian Date(MJD)转换为不精确的儒略日
定义 JulianDate.cpp:65
void aJDToMJD(const JulianDate &jd, ModJulianDate &mjd)
将儒略日转换为简约儒略日
定义 JulianDate.cpp:36
void aJDToDateTime(const JulianDate &jd, DateTime &dttm)
将儒略日转换为日期时间
定义 JulianDate.cpp:91
constexpr double kSecondsPerDay
一天的秒数
定义 Constants.h:227
constexpr double kJ2000Epoch
J2000历元
定义 Constants.h:37
constexpr double kDaysPerJulianCentury
儒略世纪天数
定义 Constants.h:225
Unit s
定义 Unit.cpp:465
Unit day
定义 Unit.cpp:470
Unit sec
定义 Unit.cpp:464