🛰️航天仿真算法库 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 double aJDToMJD_Imprecise(const JulianDate& jd);
53
54
57AST_CORE_API ImpreciseMJD aJDToMJD_Imprecise(ImpreciseJD jd);
58
59
62AST_CORE_API ImpreciseJD aMJDToJD_Imprecise(const ModJulianDate& mjd);
63
64
67AST_CORE_API ImpreciseJD aMJDToJD_Imprecise(ImpreciseMJD mjd);
68
69
71AST_CORE_CAPI void aDateTimeToJD(const DateTime& dttm, JulianDate& jd);
72
73
75AST_CORE_CAPI void aJDToDateTime(const JulianDate& jd, DateTime& dttm);
76
77
82{
83public:
85 static JulianDate FromImpreciseDay(double JD){
86 int day = static_cast<int>(JD);
87 double second = (JD - day) * 86400.0;
88 return JulianDate::FromDaySecond(day, second);
89 }
91 static JulianDate FromDaySecond(int day, double second){
92 return JulianDate{day, second};
93 }
95 static JulianDate FromDateTime(const DateTime& dttm)
96 {
97 JulianDate jd;
98 aDateTimeToJD(dttm, jd);
99 return jd;
100 }
103 return JulianDate::FromDaySecond(static_cast<int>(kJ2000Epoch), 0.0);
104 }
105 AST_CORE_API
106 static JulianDate FromDateTime(int year, int month, int day, int hour, int minute, double second);
107public:
110 double impreciseDay() const{return day_ + second_ /86400.;}
111
113 void setImpreciseDay(double jd){
114 int day = static_cast<int>(jd);
115 double second = (jd - day) * 86400.0;
116 setDaySecond(day, second);
117 }
118public:
119 int day() const{return day_;}
120 int& day(){return day_;}
121 double second() const {return second_;}
122 double& second(){return second_;}
123 void setDay(int day){day_ = day;}
124 void setSecond(double sec){second_ = sec;}
125
127 void getDaySecond(int& day, double& second) const{
128 day = day_;
129 second = second_;
130 }
132 void setDaySecond(int day, double second){
133 day_ = day;
134 second_ = second;
135 }
136public:
138 double dayFractional() const{
139 return second_ / kSecondsPerDay;
140 }
142 void setDayFractional(double df){
143 second_ = df * kSecondsPerDay;
144 }
145public:
148 return daysFromJ2000() / kDaysPerJulianCentury;
149 }
151 double daysFromJ2000() const{
152 return ((day_ - kJ2000Epoch) + dayFractional());
153 }
155 double secondsFromJ2000() const{
156 return (day_ - kJ2000Epoch) * kSecondsPerDay + second_;
157 }
158public:
159 JulianDate& operator += (double sec)
160 {
161 this->second() += sec; // 适用于任何时间尺度,包括考核闰秒的和不考虑闰秒的
162 return *this;
163 }
164 JulianDate& operator -= (double sec)
165 {
166 this->second() -= sec; // 适用于任何时间尺度,包括考核闰秒的和不考虑闰秒的
167 return *this;
168 }
169 JulianDate operator + (double sec) const
170 {
171 JulianDate jd{ *this };
172 jd += sec;
173 return jd;
174 }
175 JulianDate operator - (double sec) const
176 {
177 JulianDate jd{ *this };
178 jd -= sec;
179 return jd;
180 }
181 DaySecDuration operator - (const JulianDate& other) const
182 {
183 return {day() - other.day(), second() - other.second()};
184 }
185public:
189 JulianDate shiftedBySecond(double second) const{
190 return JulianDate::FromDaySecond(day_, second_ + second);
191 }
192public:
193 int day_; // 天数部分 day part of julian date
194 double second_; // 秒数部分 second part of julia date
195};
196
197
198
201AST_NAMESPACE_END
202
Unit day
定义 Unit.cpp:430
Unit sec
定义 Unit.cpp:424
日期时间
定义 DateTime.hpp:418
儒略日
定义 JulianDate.hpp:82
double daysFromJ2000() const
计算儒略日与 J2000.0 历元的时间差(儒略日)
定义 JulianDate.hpp:151
double impreciseDay() const
获取不精确的天数
定义 JulianDate.hpp:110
static JulianDate FromDateTime(const DateTime &dttm)
根据日期时间创建儒略日对象
定义 JulianDate.hpp:95
double julianCenturyFromJ2000() const
计算儒略日与 J2000.0 历元的时间差(儒略世纪)
定义 JulianDate.hpp:147
static JulianDate FromImpreciseDay(double JD)
根据不精确的天数创建儒略日对象
定义 JulianDate.hpp:85
double secondsFromJ2000() const
计算儒略日与 J2000.0 历元的时间差(秒)
定义 JulianDate.hpp:155
double dayFractional() const
获取小数部分的日数
定义 JulianDate.hpp:138
void setImpreciseDay(double jd)
设置不精确的天数
定义 JulianDate.hpp:113
static JulianDate FromDaySecond(int day, double second)
根据天数和秒数创建儒略日对象
定义 JulianDate.hpp:91
JulianDate shiftedBySecond(double second) const
计算儒略日偏移后的新儒略日
定义 JulianDate.hpp:189
static JulianDate J2000()
获取 J2000.0 历元的儒略日对象
定义 JulianDate.hpp:102
void setDayFractional(double df)
设置小数部分的日数
定义 JulianDate.hpp:142
void setDaySecond(int day, double second)
设置天数和秒数
定义 JulianDate.hpp:132
void getDaySecond(int &day, double &second) const
获取天数和秒数
定义 JulianDate.hpp:127
void aMJDToJD(const ModJulianDate &mjd, JulianDate &jd)
将简约儒略日转换为儒略日
定义 JulianDate.cpp:45
void aDateTimeToJD(const DateTime &dttm, JulianDate &jd)
将日期时间转换为儒略日
定义 JulianDate.cpp:77
ImpreciseJD aMJDToJD_Imprecise(ImpreciseMJD mjd)
将儒略日转换为简约儒略日Modified Julian Date(MJD)
定义 JulianDate.cpp:61
void aJDToMJD(const JulianDate &jd, ModJulianDate &mjd)
将儒略日转换为简约儒略日
定义 JulianDate.cpp:36
double aJDToMJD_Imprecise(const JulianDate &jd)
将儒略日转换为简约儒略日
定义 JulianDate.cpp:54
void aJDToDateTime(const JulianDate &jd, DateTime &dttm)
将儒略日转换为日期时间
定义 JulianDate.cpp:85
constexpr double kSecondsPerDay
一天的秒数
定义 Constants.h:204
constexpr double kJ2000Epoch
J2000历元
定义 Constants.h:37
constexpr double kDaysPerJulianCentury
儒略世纪天数
定义 Constants.h:202