🛰️航天仿真算法库 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 "AstUtil/StringView.hpp"
30#include <stdint.h> // for int64_t
31
32AST_NAMESPACE_BEGIN
33
41class DateTime;
42
43class LongDuration;
44class ShortDuration;
45class DaySecDuration;
46
47class TAIScale;
48class TDBScale;
49class TTScale;
50class UTCScale;
51
52class TimePoint;
53
54constexpr static int kTimePointDefaultFormatPrecision = 6;
55
56
57// --------------------
58// 时间点与时间系统的转换
59// --------------------
60
62AST_CORE_API void aTimePointToUTC(const TimePoint& time, JulianDate& jdUTC);
63
65AST_CORE_API void aTimePointToTT(const TimePoint& time, JulianDate& jdTT);
66
68AST_CORE_API void aTimePointToTDB(const TimePoint& time, JulianDate& jdTDB);
69
71AST_CORE_API void aTimePointToTAI(const TimePoint& time, JulianDate& jdTAI);
72
74AST_CORE_API void aTimePointToUT1(const TimePoint& time, JulianDate& jdUT1);
75
77AST_CORE_API void aTimePointToUTC(const TimePoint& time, DateTime& dttmUTC);
78
80AST_CORE_API void aTimePointToTT(const TimePoint& time, DateTime& dttmTT);
81
83AST_CORE_API void aTimePointToTDB(const TimePoint& time, DateTime& dttmTDB);
84
86AST_CORE_API void aTimePointToTAI(const TimePoint& time, DateTime& dttmTAI);
87
89AST_CORE_API void aTimePointToUT1(const TimePoint& time, DateTime& dttmUT1);
90
91
92
93// ----------------
94// 时间点格式化与解析
95// ----------------
96
97
99AST_CORE_CAPI errc_t aTimePointFormat(const TimePoint& time, std::string& str, int precision = kTimePointDefaultFormatPrecision);
100
102AST_CORE_CAPI errc_t aTimePointParse(StringView str, TimePoint& time);
103
104
107{
108public:
110 AST_CORE_API
111 static TimePoint Default();
112
115 AST_CORE_API
116 static TimePoint Epoch();
117
119 AST_CORE_API
120 static TimePoint CurrentTime();
121
123 AST_CORE_API
124 static TimePoint TodayUTC();
125
127 AST_CORE_API
128 static TimePoint TomorrowUTC();
129
131 AST_CORE_API
132 static TimePoint FromUTC(int year, int month, int day, int hour, int minute, double second);
133
135 AST_CORE_API
136 static TimePoint FromUTC(const DateTime& dttmUTC);
137
139 AST_CORE_API
140 static TimePoint FromBJT(const DateTime& dttmBJT);
141
143 AST_CORE_API
144 static TimePoint FromTAI(const DateTime& dttmTAI);
145
147 AST_CORE_API
148 static TimePoint FromTAI(const JulianDate& jdTAI);
149
151 AST_CORE_API
152 static TimePoint FromTT(const JulianDate& jdTT);
153
154 AST_CORE_API
155 static TimePoint FromTT(const DateTime& dttmTT);
156
158 AST_CORE_API
159 static TimePoint FromTDB(const JulianDate& jdTDB);
160
162 AST_CORE_API
163 static TimePoint FromImpreciseJDTT(double jdTT);
164
167 return {0, -kTTMinusTAI};
168 }
169
173 AST_CORE_API
174 static TimePoint Parse(StringView str);
175
177 AST_CORE_API
178 static TimePoint ParseUTC(StringView str);
179
181 AST_CORE_API
182 static TimePoint ParseBJT(StringView str);
183public:
185 int64_t integerPart() const { return duration_.integer_; }
186
188 double fractionalPart() const { return duration_.fractional_; }
189public:
191 double daysFromJ2000TT() const{
192 return ((double)integerPart() / kSecondsPerDay) + (fractionalPart() + kTTMinusTAI) / kSecondsPerDay;
193 }
194
197 return daysFromJ2000TT() / kDaysPerJulianCentury;
198 }
199
201 void toTT(JulianDate& jdTT) const{
202 aTimePointToTT(*this, jdTT);
203 }
206 JulianDate jdTT;
207 toTT(jdTT);
208 return jdTT;
209 }
211 void toTDB(JulianDate& jdTDB) const{
212 aTimePointToTDB(*this, jdTDB);
213 }
216 JulianDate jdTDB;
217 toTDB(jdTDB);
218 return jdTDB;
219 }
221 void toTAI(JulianDate& jdTAI) const{
222 aTimePointToTAI(*this, jdTAI);
223 }
226 JulianDate jdTAI;
227 toTAI(jdTAI);
228 return jdTAI;
229 }
231 double toEpochSecond() const{
232 return aTimePointToEpochSecond(*this);
233 }
234
236 double durationFrom(const TimePoint& other) const{
237 return duration_.minusInSecond(other.duration_);
238 }
239
241 double daysFrom(const TimePoint& other) const{
242 return duration_.minusInDay(other.duration_);
243 }
244
248 double operator-(const TimePoint& other) const{
249 return durationFrom(other);
250 }
254 TimePoint operator+(double second) const{
255 return {integerPart(), fractionalPart() + second};
256 }
257
261 TimePoint operator-(double second) const{
262 return {integerPart(), fractionalPart() - second};
263 }
264
266 bool operator == (const TimePoint& other) const
267 {
268 return this->durationFrom(other) == 0.0;
269 }
270
272 bool operator > (const TimePoint& other) const
273 {
274 return this->durationFrom(other) > 0.0;
275 }
276
278 bool operator < (const TimePoint& other) const
279 {
280 return this->durationFrom(other) < 0.0;
281 }
282
286 std::string toString(int precision = kTimePointDefaultFormatPrecision) const
287 {
288 std::string str;
289 aTimePointFormat(*this, str, precision);
290 return str;
291 }
292public:
296 TimePoint shiftedBySecond(double second) const{
297 return {integerPart(), fractionalPart() + second};
298 }
299
303 AST_CORE_API TimePoint shiftedBySecondInTDB(double second) const;
304
305protected:
306 static TimePoint FromIntegerFractional(int64_t integer, double fractional);
307public:
308 LongDuration duration_;
309};
310
311
313inline TimePoint operator ""_utc(const char* str, size_t len)
314{
315 return TimePoint::ParseUTC(StringView(str, len));
316}
317
319inline TimePoint operator ""_bjt(const char* str, size_t len)
320{
321 return TimePoint::ParseBJT(StringView(str, len));
322}
323
325inline TimePoint operator ""_timepoint(const char* str, size_t len)
326{
327 return TimePoint::Parse(StringView(str, len));
328}
329
330// typedef TimePoint<TDBScale, LongDuration> TDBTime;
331// typedef TimePoint<TTScale, LongDuration> TTTime;
332// typedef TimePoint<UTCScale, LongDuration> UTCTime;
333// typedef TimePoint<TAIScale, LongDuration> TAITime;
334
335// typedef TAITime AbsTime;
336// typedef TAITime AstTime;
337
338
341AST_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:107
JulianDate toTAI() const
将时间点转换为儒略日数(原子时 TAI)
定义 TimePoint.hpp:225
double julianCenturyFromJ2000TT() const
计算时间点与 J2000 epoch 的时间差(儒略世纪)
定义 TimePoint.hpp:196
TimePoint shiftedBySecond(double second) const
计算时间点偏移后的新时间点,按默认时间尺度进行时间偏移
定义 TimePoint.hpp:296
static TimePoint J2000TT()
J2000.0 TT 时间点
定义 TimePoint.hpp:166
double fractionalPart() const
时间点的小数秒数部分
定义 TimePoint.hpp:188
double durationFrom(const TimePoint &other) const
计算与另一个时间点的时间差(秒数)
定义 TimePoint.hpp:236
TimePoint operator-(double second) const
时间点减法运算符
定义 TimePoint.hpp:261
TimePoint operator+(double second) const
时间点加法运算符
定义 TimePoint.hpp:254
void toTT(JulianDate &jdTT) const
将时间点转换为儒略日数(地球时TT)
定义 TimePoint.hpp:201
void toTDB(JulianDate &jdTDB) const
将时间点转换为儒略日数(质心动力学时TDB)
定义 TimePoint.hpp:211
double toEpochSecond() const
将时间点转换为相对于参考历元的秒数
定义 TimePoint.hpp:231
JulianDate toTT() const
将时间点转换为儒略日数(地球时TT)
定义 TimePoint.hpp:205
double daysFromJ2000TT() const
计算时间点与 J2000 epoch 的时间差(天)
定义 TimePoint.hpp:191
int64_t integerPart() const
时间点的整数秒数部分
定义 TimePoint.hpp:185
double operator-(const TimePoint &other) const
时间点减法运算符
定义 TimePoint.hpp:248
JulianDate toTDB() const
将时间点转换为儒略日数(质心动力学时TDB)
定义 TimePoint.hpp:215
std::string toString(int precision=kTimePointDefaultFormatPrecision) const
将时间点格式化为字符串
定义 TimePoint.hpp:286
double daysFrom(const TimePoint &other) const
计算与另一个时间点的时间差(天)
定义 TimePoint.hpp:241
void toTAI(JulianDate &jdTAI) const
将时间点转换为儒略日数(原子时 TAI)
定义 TimePoint.hpp:221
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:221
constexpr double kDaysPerJulianCentury
儒略世纪天数
定义 Constants.h:219
constexpr double kTTMinusTAI
地球时相对原子时的偏置[s]
定义 Constants.h:45