🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
TimePoint.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "Duration.hpp" // for LongDuration
25#include "AstCore/Constants.h" // for kJ2000XXXX
26#include "AstCore/JulianDate.hpp"
27#include "AstCore/DateTime.hpp"
28#include "AstCore/RunTime.hpp"
29#include <stdint.h> // for int64_t
30
31AST_NAMESPACE_BEGIN
32
40class DateTime;
41
42class LongDuration;
43class ShortDuration;
44class DaySecDuration;
45
46class TAIScale;
47class TDBScale;
48class TTScale;
49class UTCScale;
50
51class TimePoint;
52
53constexpr static int kTimePointDefaultFormatPrecision = 6;
54
55
56// --------------------
57// 时间点与时间系统的转换
58// --------------------
59
61AST_CORE_API void aTimePointToUTC(const TimePoint& time, JulianDate& jdUTC);
62
64AST_CORE_API void aTimePointToTT(const TimePoint& time, JulianDate& jdTT);
65
67AST_CORE_API void aTimePointToTDB(const TimePoint& time, JulianDate& jdTDB);
68
70AST_CORE_API void aTimePointToTAI(const TimePoint& time, JulianDate& jdTAI);
71
73AST_CORE_API void aTimePointToUT1(const TimePoint& time, JulianDate& jdUT1);
74
76AST_CORE_API void aTimePointToUTC(const TimePoint& time, DateTime& dttmUTC);
77
79AST_CORE_API void aTimePointToTT(const TimePoint& time, DateTime& dttmTT);
80
82AST_CORE_API void aTimePointToTDB(const TimePoint& time, DateTime& dttmTDB);
83
85AST_CORE_API void aTimePointToTAI(const TimePoint& time, DateTime& dttmTAI);
86
88AST_CORE_API void aTimePointToUT1(const TimePoint& time, DateTime& dttmUT1);
89
90
91
92// ----------------
93// 时间点格式化与解析
94// ----------------
95
96
98AST_CORE_CAPI errc_t aTimePointFormat(const TimePoint& time, std::string& str, int precision = kTimePointDefaultFormatPrecision);
99
101AST_CORE_CAPI errc_t aTimePointParse(StringView str, TimePoint& time);
102
103
106{
107public:
109 AST_CORE_API
110 static TimePoint Default();
111
114 AST_CORE_API
115 static TimePoint Epoch();
116
118 AST_CORE_API
119 static TimePoint CurrentTime();
120
122 AST_CORE_API
123 static TimePoint TodayUTC();
124
126 AST_CORE_API
127 static TimePoint TomorrowUTC();
128
130 AST_CORE_API
131 static TimePoint FromUTC(int year, int month, int day, int hour, int minute, double second);
132
134 AST_CORE_API
135 static TimePoint FromUTC(const DateTime& dttmUTC);
136
138 AST_CORE_API
139 static TimePoint FromTAI(const DateTime& dttmTAI);
140
142 AST_CORE_API
143 static TimePoint FromTAI(const JulianDate& jdTAI);
144
146 AST_CORE_API
147 static TimePoint FromTT(const JulianDate& jdTT);
148
149 AST_CORE_API
150 static TimePoint FromTT(const DateTime& dttmTT);
151
153 AST_CORE_API
154 static TimePoint FromTDB(const JulianDate& jdTDB);
155
157 AST_CORE_API
158 static TimePoint FromImpreciseJDTT(double jdTT);
159
162 return {0, -kTTMinusTAI};
163 }
164
168 AST_CORE_API
169 static TimePoint Parse(StringView str);
170
171public:
173 int64_t integerPart() const { return duration_.integer_; }
174
176 double fractionalPart() const { return duration_.fractional_; }
177public:
179 double daysFromJ2000TT() const{
180 return ((double)integerPart() / kSecondsPerDay) + (fractionalPart() + kTTMinusTAI) / kSecondsPerDay;
181 }
182
185 return daysFromJ2000TT() / kDaysPerJulianCentury;
186 }
187
189 void toTT(JulianDate& jdTT) const{
190 aTimePointToTT(*this, jdTT);
191 }
194 JulianDate jdTT;
195 toTT(jdTT);
196 return jdTT;
197 }
199 void toTDB(JulianDate& jdTDB) const{
200 aTimePointToTDB(*this, jdTDB);
201 }
204 JulianDate jdTDB;
205 toTDB(jdTDB);
206 return jdTDB;
207 }
209 void toTAI(JulianDate& jdTAI) const{
210 aTimePointToTAI(*this, jdTAI);
211 }
214 JulianDate jdTAI;
215 toTAI(jdTAI);
216 return jdTAI;
217 }
219 double toEpochSecond() const{
220 return aTimePointToEpochSecond(*this);
221 }
222
224 double durationFrom(const TimePoint& other) const{
225 return duration_.minusInSecond(other.duration_);
226 }
227
229 double daysFrom(const TimePoint& other) const{
230 return duration_.minusInDay(other.duration_);
231 }
232
236 double operator-(const TimePoint& other) const{
237 return durationFrom(other);
238 }
242 TimePoint operator+(double second) const{
243 return {integerPart(), fractionalPart() + second};
244 }
245
249 TimePoint operator-(double second) const{
250 return {integerPart(), fractionalPart() - second};
251 }
252
254 bool operator == (const TimePoint& other) const
255 {
256 return this->durationFrom(other) == 0.0;
257 }
258
260 bool operator > (const TimePoint& other) const
261 {
262 return this->durationFrom(other) > 0.0;
263 }
264
266 bool operator < (const TimePoint& other) const
267 {
268 return this->durationFrom(other) < 0.0;
269 }
270
274 std::string toString(int precision = kTimePointDefaultFormatPrecision) const
275 {
276 std::string str;
277 aTimePointFormat(*this, str, precision);
278 return str;
279 }
280public:
284 TimePoint shiftedBySecond(double second) const{
285 return {integerPart(), fractionalPart() + second};
286 }
287
291 AST_CORE_API TimePoint shiftedBySecondInTDB(double second) const;
292
293protected:
294 static TimePoint FromIntegerFractional(int64_t integer, double fractional);
295public:
296 LongDuration duration_;
297};
298
299
300// typedef TimePoint<TDBScale, LongDuration> TDBTime;
301// typedef TimePoint<TTScale, LongDuration> TTTime;
302// typedef TimePoint<UTCScale, LongDuration> UTCTime;
303// typedef TimePoint<TAIScale, LongDuration> TAITime;
304
305// typedef TAITime AbsTime;
306// typedef TAITime AstTime;
307
308
311AST_NAMESPACE_END
long int integer
定义 MockSnopt.c:24
Unit minute
分钟,不要命名为min,容易与std::min冲突
定义 Unit.cpp:437
Unit day
定义 Unit.cpp:440
Unit hour
小时
定义 Unit.cpp:438
日期时间
定义 DateTime.hpp:418
儒略日
定义 JulianDate.hpp:82
长时长
定义 Duration.hpp:49
绝对时间点
定义 TimePoint.hpp:106
JulianDate toTAI() const
将时间点转换为儒略日数(原子时 TAI)
定义 TimePoint.hpp:213
double julianCenturyFromJ2000TT() const
计算时间点与 J2000 epoch 的时间差(儒略世纪)
定义 TimePoint.hpp:184
TimePoint shiftedBySecond(double second) const
计算时间点偏移后的新时间点,按默认时间尺度进行时间偏移
定义 TimePoint.hpp:284
static TimePoint J2000TT()
J2000.0 TT 时间点
定义 TimePoint.hpp:161
double fractionalPart() const
时间点的小数秒数部分
定义 TimePoint.hpp:176
double durationFrom(const TimePoint &other) const
计算与另一个时间点的时间差(秒数)
定义 TimePoint.hpp:224
TimePoint operator-(double second) const
时间点减法运算符
定义 TimePoint.hpp:249
TimePoint operator+(double second) const
时间点加法运算符
定义 TimePoint.hpp:242
void toTT(JulianDate &jdTT) const
将时间点转换为儒略日数(地球时TT)
定义 TimePoint.hpp:189
void toTDB(JulianDate &jdTDB) const
将时间点转换为儒略日数(质心动力学时TDB)
定义 TimePoint.hpp:199
double toEpochSecond() const
将时间点转换为相对于参考历元的秒数
定义 TimePoint.hpp:219
JulianDate toTT() const
将时间点转换为儒略日数(地球时TT)
定义 TimePoint.hpp:193
double daysFromJ2000TT() const
计算时间点与 J2000 epoch 的时间差(天)
定义 TimePoint.hpp:179
int64_t integerPart() const
时间点的整数秒数部分
定义 TimePoint.hpp:173
double operator-(const TimePoint &other) const
时间点减法运算符
定义 TimePoint.hpp:236
JulianDate toTDB() const
将时间点转换为儒略日数(质心动力学时TDB)
定义 TimePoint.hpp:203
std::string toString(int precision=kTimePointDefaultFormatPrecision) const
将时间点格式化为字符串
定义 TimePoint.hpp:274
double daysFrom(const TimePoint &other) const
计算与另一个时间点的时间差(天)
定义 TimePoint.hpp:229
void toTAI(JulianDate &jdTAI) const
将时间点转换为儒略日数(原子时 TAI)
定义 TimePoint.hpp:209
double aTimePointToEpochSecond(const TimePoint &tp)
将时间点转换为相对参考历元的秒数
定义 RunTimeEpoch.cpp:27
void aTimePointToTAI(const TimePoint &time, JulianDate &jdTAI)
将时间点转换为儒略日数(原子时 TAI)
定义 TimePoint.cpp:60
errc_t aTimePointFormat(const TimePoint &time, std::string &str, int precision)
将时间点格式化为字符串
定义 TimePoint.cpp:118
void aTimePointToTDB(const TimePoint &time, DateTime &dttmTDB)
将时间点转换为日期时间(质心动力学时TDB)
定义 TimePoint.cpp:93
void aTimePointToUTC(const TimePoint &time, JulianDate &jdUTC)
将时间点转换为儒略日数(协调世界时 UTC)
定义 TimePoint.cpp:42
void aTimePointToUT1(const TimePoint &time, JulianDate &jdUT1)
将时间点转换为儒略日数(世界时 UT1)
定义 TimePoint.cpp:71
void aTimePointToTT(const TimePoint &time, JulianDate &jdTT)
将时间点转换为儒略日数(地球时TT)
定义 TimePoint.cpp:48
errc_t aTimePointParse(StringView str, TimePoint &time)
从字符串解析时间点
定义 TimePoint.cpp:137
constexpr double kSecondsPerDay
一天的秒数
定义 Constants.h:204
constexpr double kDaysPerJulianCentury
儒略世纪天数
定义 Constants.h:202
constexpr double kTTMinusTAI
地球时相对原子时的偏置[s]
定义 Constants.h:45