🛰️航天仿真算法库 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 double secOfDay() const {return time_.totalSecond();}
498 void setYear(int year) {date_.setYear(year);}
499 void setMonth(int month) {date_.setMonth(month);}
500 void setDay(int day) {date_.setDay(day);}
501 void setHour(int hour) {time_.setHour(hour);}
502 void setMinute(int minute) {time_.setMinute(minute);}
503 void setSecond(double second) {time_.setSecond(second);}
504public:
505 void normalize(){
506 aDateTimeNormalize(*this);
507 }
508 void normalizeUTC(){
510 }
511 void normalizeLocal(int timezone){
512 aDateTimeNormalizeLocal(*this, timezone);
513 }
514 void normalizeBJT(){
516 }
517 DateTime normalized() const{
518 DateTime dttm = *this;
519 dttm.normalize();
520 return dttm;
521 }
522 DateTime normalizedUTC() const{
523 DateTime dttm = *this;
524 dttm.normalizeUTC();
525 return dttm;
526 }
527 DateTime normalizedLocal(int timezone) const{
528 DateTime dttm = *this;
529 dttm.normalizeLocal(timezone);
530 return dttm;
531 }
532 DateTime normalizedBJT() const{
533 DateTime dttm = *this;
534 dttm.normalizeBJT();
535 return dttm;
536 }
537public:
538 std::string toString(int precision = 3) const{
539 std::string str;
540 aDateTimeFormatDefault(*this, str, precision);
541 return str;
542 }
543public:
544 void addYears(int years){
545 aDateTimeAddYears(*this, years);
546 }
547 void addMonths(int months){
548 aDateTimeAddMonths(*this, months);
549 }
550 void addDays(int days){
551 aDateTimeAddDays(*this, days);
552 }
553 void addDaysUTC(int days){
554 aDateTimeAddDaysUTC(*this, days);
555 }
556 void addDaysLocal(int days, int timezone){
557 aDateTimeAddDaysLocal(*this, days, timezone);
558 }
559 void addDaysBJT(int days){
560 aDateTimeAddDaysBJT(*this, days);
561 }
562 void addHours(int hours){
563 aDateTimeAddHours(*this, hours);
564 }
565 void addHoursUTC(int hours){
566 aDateTimeAddHoursUTC(*this, hours);
567 }
568 void addHoursLocal(int hours, int timezone){
569 aDateTimeAddHoursLocal(*this, hours, timezone);
570 }
571 void addHoursBJT(int hours){
572 aDateTimeAddHoursBJT(*this, hours);
573 }
574 void addMinutes(int minutes){
575 aDateTimeAddMinutes(*this, minutes);
576 }
577 void addMinutesUTC(int minutes){
578 aDateTimeAddMinutesUTC(*this, minutes);
579 }
580 void addMinutesLocal(int minutes, int timezone){
581 aDateTimeAddMinutesLocal(*this, minutes, timezone);
582 }
583 void addMinutesBJT(int minutes){
584 aDateTimeAddMinutesBJT(*this, minutes);
585 }
586 void addSeconds(double seconds){
587 aDateTimeAddSeconds(*this, seconds);
588 }
589 void addSecondsUTC(double seconds){
590 aDateTimeAddSecondsUTC(*this, seconds);
591 }
592 void addSecondsLocal(double seconds, int timezone){
593 aDateTimeAddSecondsLocal(*this, seconds, timezone);
594 }
595 void addSecondsBJT(double seconds){
596 aDateTimeAddSecondsBJT(*this, seconds);
597 }
598public:
599 DateTime& operator += (double sec)
600 {
601 this->second() += sec; // 适用于任何时间尺度,包括考虑闰秒的和不考虑闰秒的
602 return *this;
603 }
604 DateTime& operator -= (double sec)
605 {
606 this->second() -= sec; // 适用于任何时间尺度,包括考虑闰秒的和不考虑闰秒的
607 return *this;
608 }
609 DateTime operator + (double sec) const
610 {
611 auto dttm = DateTime{ *this };
612 dttm += sec;
613 return dttm;
614 }
615 DateTime operator -(double sec) const
616 {
617 auto dttm = DateTime{ *this };
618 dttm -= sec;
619 return dttm;
620 }
621
622public:
625};
626
627A_ALWAYS_INLINE
629{
630 DateTime dttm;
632 return dttm;
633}
634
635A_ALWAYS_INLINE
636DateTime aCurrentDateTimeUTC()
637{
638 DateTime dttm;
639 aCurrentDateTimeUTC(dttm);
640 return dttm;
641}
642
643
647AST_NAMESPACE_END
648
Unit minute
分钟,不要命名为min,容易与std::min冲突
定义 Unit.cpp:437
Unit day
定义 Unit.cpp:440
Unit hour
小时
定义 Unit.cpp:438
Unit sec
定义 Unit.cpp:434
日期时间
定义 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:623
Time time_
时间
定义 DateTime.hpp:624
日期
定义 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