🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
DateTime.hpp
1
20
21#pragma once
22
23#include "AstUtil/StringView.hpp"
24#include "AstGlobal.h"
25#include "Date.hpp"
26#include "Time.hpp"
27#include <time.h>
28#include <string>
29
30
31struct tm;
32
33AST_NAMESPACE_BEGIN
34
35
41constexpr double kTimeDefaultFormatPrecision = 3;
42
43class DateTime;
44
46AST_CORE_CAPI void aCurrentDateTimeLocal(DateTime& dttm);
47
49AST_CORE_CAPI void aCurrentDateTimeUTC(DateTime& dttm);
50
54AST_CORE_CAPI void aTodayDateTimeUTC(DateTime& dttm);
55
59AST_CORE_CAPI void aTomorrowDateTimeUTC(DateTime& dttm);
60
61// --------------------
62// 日期时间规范化
63// --------------------
64
69AST_CORE_CAPI void aDateTimeNormalize(DateTime& dttm);
70
75AST_CORE_CAPI void aDateTimeNormalizeUTC(DateTime& dttm);
76
82AST_CORE_CAPI void aDateTimeNormalizeLocal(DateTime& dttm, int timezone);
83
88AST_CORE_CAPI void aDateTimeNormalizeBJT(DateTime& dttm);
89
90
91
92// -------------
93// 日期时间递增
94// -------------
95
96
102AST_CORE_CAPI void aDateTimeAddYears(DateTime& dttm, int years);
103
109AST_CORE_CAPI void aDateTimeAddMonths(DateTime& dttm, int months);
110
116AST_CORE_CAPI void aDateTimeAddDays(DateTime& dttm, int days);
117
118
124AST_CORE_CAPI void aDateTimeAddDaysUTC(DateTime& dttm, int days);
125
126
133AST_CORE_CAPI void aDateTimeAddDaysLocal(DateTime& dttm, int days, int timezone);
134
135
141AST_CORE_CAPI void aDateTimeAddDaysBJT(DateTime& dttm, int days);
142
143
144
150AST_CORE_CAPI void aDateTimeAddHours(DateTime& dttm, int hours);
151
152
158AST_CORE_CAPI void aDateTimeAddHoursUTC(DateTime& dttm, int hours);
159
166AST_CORE_CAPI void aDateTimeAddHoursLocal(DateTime& dttm, int hours, int timezone);
167
168
174AST_CORE_CAPI void aDateTimeAddHoursBJT(DateTime& dttm, int hours);
175
176
182AST_CORE_CAPI void aDateTimeAddMinutes(DateTime& dttm, int minutes);
183
184
190AST_CORE_CAPI void aDateTimeAddMinutesUTC(DateTime& dttm, int minutes);
191
192
193
200AST_CORE_CAPI void aDateTimeAddMinutesLocal(DateTime& dttm, int minutes, int timezone);
201
202
208AST_CORE_CAPI void aDateTimeAddMinutesBJT(DateTime& dttm, int minutes);
209
210
216AST_CORE_CAPI void aDateTimeAddSeconds(DateTime& dttm, double seconds);
217
218
224AST_CORE_CAPI void aDateTimeAddSecondsUTC(DateTime& dttm, double seconds);
225
226
233AST_CORE_CAPI void aDateTimeAddSecondsLocal(DateTime& dttm, double seconds, int timezone);
234
235
241AST_CORE_CAPI void aDateTimeAddSecondsBJT(DateTime& dttm, double seconds);
242
243
244
245// -------------
246// 日期时间格式化
247// -------------
248
249
256AST_CORE_CAPI errc_t aDateTimeFormat(const DateTime& dttm, StringView format, std::string& str);
257
258
264AST_CORE_CAPI errc_t aDateTimeFormatGregorian(const DateTime& dttm, std::string& str, int precision = 3);
265
266
272AST_CORE_CAPI errc_t aDateTimeFormatGregorianEn(const DateTime& dttm, std::string& str);
273
274
280AST_CORE_CAPI errc_t aDateTimeFormatGMT(const DateTime& dttm, std::string& str);
281
282
288AST_CORE_CAPI errc_t aDateTimeFormatISO8601(const DateTime& dttm, std::string& str);
289
290
293A_ALWAYS_INLINE errc_t aDateTimeFormatISO(const DateTime& dttm, std::string& str)
294{
295 return aDateTimeFormatISO8601(dttm, str);
296}
297
298
299
305AST_CORE_CAPI errc_t aDateTimeFormatRFC3339(const DateTime& dttm, std::string& str);
306
307
308#ifdef AST_ENABLE_DATETIME_FORMAT_RFC // 启用其他RFC日期时间格式化
309
317AST_CORE_CAPI errc_t aDateTimeFormatRFC1123(const DateTime& dttm, std::string& str);
318
319
328AST_CORE_CAPI errc_t aDateTimeFormatRFC2822(const DateTime& dttm, std::string& str);
329
330#endif
331
332
338A_ALWAYS_INLINE errc_t aDateTimeFormatDefault(const DateTime& dttm, std::string& str, int precision = kTimeDefaultFormatPrecision)
339{
340 return aDateTimeFormatGregorian(dttm, str, precision);
341}
342
343
344
345// -------------
346// 日期时间解析
347// -------------
348
349
350
356AST_CORE_CAPI errc_t aDateTimeParseISO8601(StringView str, DateTime& dttm);
357
358
359A_ALWAYS_INLINE errc_t aDateTimeParseISO(StringView str, DateTime& dttm)
360{
361 return aDateTimeParseISO8601(str, dttm);
362}
363
364
365
371AST_CORE_CAPI errc_t aDateTimeParseRFC3339(StringView str, DateTime& dttm);
372
373
379AST_CORE_CAPI errc_t aDateTimeParseGregorian(StringView str, DateTime& dttm);
380
381
382
388AST_CORE_CAPI errc_t aDateTimeParseGregorianEn(StringView str, DateTime& dttm);
389
390
396AST_CORE_CAPI errc_t aDateTimeParseGMT(StringView str, DateTime& dttm);
397
398
405AST_CORE_CAPI errc_t aDateTimeParse(StringView str, StringView format, DateTime& dttm);
406
407
413AST_CORE_CAPI errc_t aDateTimeParseAny(StringView str, DateTime& dttm);
414
415
418{
419public:
422 eUTC = 0,
423 eBJT = 8,
424 };
425public:
429 AST_CORE_API
430 static DateTime FromJD(const JulianDate& jd);
431
435 A_ALWAYS_INLINE
436 static DateTime FromJulianDate(const JulianDate& jd){return FromJD(jd);}
437
442 AST_CORE_API
443 static DateTime FromString(StringView str, StringView format);
444
448 AST_CORE_API
449 static DateTime FromString(StringView str);
450
453 AST_CORE_API
454 static DateTime FromGregorian(StringView str);
455
456
458 AST_CORE_API
459 static DateTime FromTm(const tm* time);
460
462 AST_CORE_API
463 static DateTime FromTimeTLocal(time_t time);
464
466 AST_CORE_API
467 static DateTime FromTimeTUTC(time_t time);
468
473 DateTime dttm;
474 aDateTimeParseAny(str, dttm);
475 return dttm;
476 }
477
478public:
479 const Date& date() const{return date_;}
480 Date& date() {return date_;}
481 const Time& time() const {return time_;}
482 Time& time() {return time_;}
483 int year() const {return date_.year();}
484 int& year() {return date_.year();}
485 int month() const {return date_.month();}
486 int& month() {return date_.month();}
487 int day() const {return date_.day();}
488 int& day() {return date_.day();}
489 int hour() const {return time_.hour();}
490 int& hour() {return time_.hour();}
491 int minute() const {return time_.minute();}
492 int& minute() {return time_.minute();}
493 double second() const {return time_.second();}
494 double& second() {return time_.second();}
495 int dayOfYear() const {return date_.dayOfYear();}
496 int dayOfWeek() const {return date_.dayOfWeek();}
497 void setYear(int year) {date_.setYear(year);}
498 void setMonth(int month) {date_.setMonth(month);}
499 void setDay(int day) {date_.setDay(day);}
500 void setHour(int hour) {time_.setHour(hour);}
501 void setMinute(int minute) {time_.setMinute(minute);}
502 void setSecond(double second) {time_.setSecond(second);}
503public:
504 void normalize(){
505 aDateTimeNormalize(*this);
506 }
507 void normalizeUTC(){
509 }
510 void normalizeLocal(int timezone){
511 aDateTimeNormalizeLocal(*this, timezone);
512 }
513 void normalizeBJT(){
515 }
516 DateTime normalized() const{
517 DateTime dttm = *this;
518 dttm.normalize();
519 return dttm;
520 }
521 DateTime normalizedUTC() const{
522 DateTime dttm = *this;
523 dttm.normalizeUTC();
524 return dttm;
525 }
526 DateTime normalizedLocal(int timezone) const{
527 DateTime dttm = *this;
528 dttm.normalizeLocal(timezone);
529 return dttm;
530 }
531 DateTime normalizedBJT() const{
532 DateTime dttm = *this;
533 dttm.normalizeBJT();
534 return dttm;
535 }
536public:
537 std::string toString(int precision = 3) const{
538 std::string str;
539 aDateTimeFormatDefault(*this, str, precision);
540 return str;
541 }
542public:
543 void addYears(int years){
544 aDateTimeAddYears(*this, years);
545 }
546 void addMonths(int months){
547 aDateTimeAddMonths(*this, months);
548 }
549 void addDays(int days){
550 aDateTimeAddDays(*this, days);
551 }
552 void addDaysUTC(int days){
553 aDateTimeAddDaysUTC(*this, days);
554 }
555 void addDaysLocal(int days, int timezone){
556 aDateTimeAddDaysLocal(*this, days, timezone);
557 }
558 void addDaysBJT(int days){
559 aDateTimeAddDaysBJT(*this, days);
560 }
561 void addHours(int hours){
562 aDateTimeAddHours(*this, hours);
563 }
564 void addHoursUTC(int hours){
565 aDateTimeAddHoursUTC(*this, hours);
566 }
567 void addHoursLocal(int hours, int timezone){
568 aDateTimeAddHoursLocal(*this, hours, timezone);
569 }
570 void addHoursBJT(int hours){
571 aDateTimeAddHoursBJT(*this, hours);
572 }
573 void addMinutes(int minutes){
574 aDateTimeAddMinutes(*this, minutes);
575 }
576 void addMinutesUTC(int minutes){
577 aDateTimeAddMinutesUTC(*this, minutes);
578 }
579 void addMinutesLocal(int minutes, int timezone){
580 aDateTimeAddMinutesLocal(*this, minutes, timezone);
581 }
582 void addMinutesBJT(int minutes){
583 aDateTimeAddMinutesBJT(*this, minutes);
584 }
585 void addSeconds(double seconds){
586 aDateTimeAddSeconds(*this, seconds);
587 }
588 void addSecondsUTC(double seconds){
589 aDateTimeAddSecondsUTC(*this, seconds);
590 }
591 void addSecondsLocal(double seconds, int timezone){
592 aDateTimeAddSecondsLocal(*this, seconds, timezone);
593 }
594 void addSecondsBJT(double seconds){
595 aDateTimeAddSecondsBJT(*this, seconds);
596 }
597public:
598 DateTime& operator += (double sec)
599 {
600 this->second() += sec; // 适用于任何时间尺度,包括考虑闰秒的和不考虑闰秒的
601 return *this;
602 }
603 DateTime& operator -= (double sec)
604 {
605 this->second() -= sec; // 适用于任何时间尺度,包括考虑闰秒的和不考虑闰秒的
606 return *this;
607 }
608 DateTime operator + (double sec) const
609 {
610 auto dttm = DateTime{ *this };
611 dttm += sec;
612 return dttm;
613 }
614 DateTime operator -(double sec) const
615 {
616 auto dttm = DateTime{ *this };
617 dttm -= sec;
618 return dttm;
619 }
620
621public:
624};
625
626A_ALWAYS_INLINE
628{
629 DateTime dttm;
631 return dttm;
632}
633
634A_ALWAYS_INLINE
635DateTime aCurrentDateTimeUTC()
636{
637 DateTime dttm;
638 aCurrentDateTimeUTC(dttm);
639 return dttm;
640}
641
642
646AST_NAMESPACE_END
647
Unit day
定义 Unit.cpp:430
Unit hour
小时
定义 Unit.cpp:428
Unit sec
定义 Unit.cpp:424
日期时间
定义 DateTime.hpp:418
static A_ALWAYS_INLINE DateTime FromJulianDate(const JulianDate &jd)
从儒略日数创建日期时间对象
定义 DateTime.hpp:436
static DateTime Parse(StringView str)
从字符串解析日期时间(任意格式)
定义 DateTime.hpp:472
ETimeZone
定义 DateTime.hpp:421
Date date_
日期
定义 DateTime.hpp:622
Time time_
时间
定义 DateTime.hpp:623
日期
定义 Date.hpp:120
儒略日
定义 JulianDate.hpp:82
时间
定义 Time.hpp:53
void aDateTimeAddMinutesBJT(DateTime &dttm, int minutes)
增加分(北京时间)
定义 DateTime.cpp:259
errc_t aDateTimeParseRFC3339(StringView str, DateTime &dttm)
解析RFC 3339格式的日期时间字符串
定义 DateTime.cpp:408
void aDateTimeNormalizeUTC(DateTime &dttm)
规范化日期时间对象(按UTC时间规范化)
定义 DateTime.cpp:90
void aDateTimeAddSecondsBJT(DateTime &dttm, double seconds)
增加秒(北京时间)
定义 DateTime.cpp:281
void aDateTimeAddDaysBJT(DateTime &dttm, int days)
增加日(北京时间)
定义 DateTime.cpp:213
void aDateTimeAddYears(DateTime &dttm, int years)
增加年
定义 DateTime.cpp:188
errc_t aDateTimeParseGMT(StringView str, DateTime &dttm)
解析GMT格式的日期时间字符串
定义 DateTime.cpp:469
void aDateTimeAddHours(DateTime &dttm, int hours)
增加时
定义 DateTime.cpp:218
errc_t aDateTimeFormatGregorianEn(const DateTime &dttm, std::string &str)
格式化日期时间为格里高利历格式(英文)
定义 DateTime.cpp:322
A_ALWAYS_INLINE errc_t aDateTimeFormatISO(const DateTime &dttm, std::string &str)
格式化日期时间为简单ISO 8601格式
定义 DateTime.hpp:293
void aTodayDateTimeUTC(DateTime &dttm)
获取今日00:00:00 UTC日期时间
定义 DateTime.cpp:67
void aDateTimeAddHoursLocal(DateTime &dttm, int hours, int timezone)
增加时(本地时间)
定义 DateTime.cpp:230
void aDateTimeAddMinutesLocal(DateTime &dttm, int minutes, int timezone)
增加分(本地时间)
定义 DateTime.cpp:252
errc_t aDateTimeFormatGMT(const DateTime &dttm, std::string &str)
格式化日期时间为GMT格式
定义 DateTime.cpp:334
void aDateTimeAddDaysLocal(DateTime &dttm, int days, int timezone)
增加日(本地时间)
定义 DateTime.cpp:208
void aDateTimeAddHoursBJT(DateTime &dttm, int hours)
增加时(北京时间)
定义 DateTime.cpp:236
AST_CORE_CAPI errc_t aDateTimeParse(StringView str, StringView format, DateTime &dttm)
解析自定义格式的日期时间字符串
定义 DateTimeParse.cpp:562
errc_t aDateTimeFormatGregorian(const DateTime &dttm, std::string &str, int precision)
格式化日期时间为格里高利历格式
定义 DateTime.cpp:311
void aDateTimeAddSecondsLocal(DateTime &dttm, double seconds, int timezone)
增加秒(本地时间)
定义 DateTime.cpp:276
errc_t aDateTimeParseAny(StringView str, DateTime &dttm)
解析任意格式的日期时间字符串
定义 DateTime.cpp:503
void aDateTimeAddHoursUTC(DateTime &dttm, int hours)
增加时(UTC时间)
定义 DateTime.cpp:224
void aDateTimeAddDays(DateTime &dttm, int days)
增加日
定义 DateTime.cpp:198
void aDateTimeAddMinutes(DateTime &dttm, int minutes)
增加分
定义 DateTime.cpp:242
errc_t aDateTimeParseGregorian(StringView str, DateTime &dttm)
解析格里高利历格式的日期时间字符串
定义 DateTime.cpp:415
void aDateTimeAddDaysUTC(DateTime &dttm, int days)
增加日(UTC时间)
定义 DateTime.cpp:203
void aDateTimeAddMonths(DateTime &dttm, int months)
增加月
定义 DateTime.cpp:193
A_ALWAYS_INLINE errc_t aDateTimeFormatDefault(const DateTime &dttm, std::string &str, int precision=kTimeDefaultFormatPrecision)
格式化日期时间为默认格式
定义 DateTime.hpp:338
void aDateTimeAddMinutesUTC(DateTime &dttm, int minutes)
增加分(UTC时间)
定义 DateTime.cpp:247
errc_t aDateTimeFormatISO8601(const DateTime &dttm, std::string &str)
格式化日期时间为ISO 8601格式
定义 DateTime.cpp:288
void aDateTimeNormalizeLocal(DateTime &dttm, int timezone)
规范化日期时间对象(按本地时间规范化)
定义 DateTime.cpp:169
void aTomorrowDateTimeUTC(DateTime &dttm)
获取明天00:00:00 UTC日期时间
定义 DateTime.cpp:73
void aDateTimeAddSecondsUTC(DateTime &dttm, double seconds)
增加秒(UTC时间)
定义 DateTime.cpp:271
void aCurrentDateTimeLocal(DateTime &dttm)
获取当前本地日期时间
定义 DateTime.cpp:55
void aDateTimeAddSeconds(DateTime &dttm, double seconds)
增加秒
定义 DateTime.cpp:266
void aDateTimeNormalizeBJT(DateTime &dttm)
规范化日期时间对象(按北京时间规范化)
定义 DateTime.cpp:183
AST_CORE_CAPI errc_t aDateTimeFormat(const DateTime &dttm, StringView format, std::string &str)
格式化日期时间为字符串
定义 DateTimeFormat.cpp:117
void aCurrentDateTimeUTC(DateTime &dttm)
获取当前UTC日期时间
定义 DateTime.cpp:61
errc_t aDateTimeParseGregorianEn(StringView str, DateTime &dttm)
解析格里高利历格式(英文)的日期时间字符串
定义 DateTime.cpp:436
void aDateTimeNormalize(DateTime &dttm)
规范化日期时间对象
定义 DateTime.cpp:80
auto normalized(const Vector &vec) -> typename std::enable_if<!std::is_pointer< Vector >::value, Vector >::type
normalized
定义 MathOperator.hpp:352
double normalize(double *vec, size_t N)
normalize
定义 MathOperator.hpp:306