🛰️航天仿真算法库 SpaceAST 0.3.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 int 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
265AST_CORE_CAPI errc_t aDateTimeFormatGregorian(const DateTime& dttm, std::string& str, int precision = kTimeDefaultFormatPrecision);
266
267
274AST_CORE_CAPI errc_t aDateTimeFormatGregorianEn(const DateTime& dttm, std::string& str, int precision = kTimeDefaultFormatPrecision);
275
276
282AST_CORE_CAPI errc_t aDateTimeFormatGMT(const DateTime& dttm, std::string& str);
283
284
290AST_CORE_CAPI errc_t aDateTimeFormatISO8601(const DateTime& dttm, std::string& str);
291
292
295A_ALWAYS_INLINE errc_t aDateTimeFormatISO(const DateTime& dttm, std::string& str)
296{
297 return aDateTimeFormatISO8601(dttm, str);
298}
299
300
301
307AST_CORE_CAPI errc_t aDateTimeFormatRFC3339(const DateTime& dttm, std::string& str);
308
309
310#ifdef AST_ENABLE_DATETIME_FORMAT_RFC // 启用其他RFC日期时间格式化
311
319AST_CORE_CAPI errc_t aDateTimeFormatRFC1123(const DateTime& dttm, std::string& str);
320
321
330AST_CORE_CAPI errc_t aDateTimeFormatRFC2822(const DateTime& dttm, std::string& str);
331
332#endif
333
334
340A_ALWAYS_INLINE errc_t aDateTimeFormatDefault(const DateTime& dttm, std::string& str, int precision = kTimeDefaultFormatPrecision)
341{
342 return aDateTimeFormatGregorian(dttm, str, precision);
343}
344
345
346
347// -------------
348// 日期时间解析
349// -------------
350
351
352
358AST_CORE_CAPI errc_t aDateTimeParseISO8601(StringView str, DateTime& dttm);
359
360
361A_ALWAYS_INLINE errc_t aDateTimeParseISO(StringView str, DateTime& dttm)
362{
363 return aDateTimeParseISO8601(str, dttm);
364}
365
366
367
373AST_CORE_CAPI errc_t aDateTimeParseRFC3339(StringView str, DateTime& dttm);
374
375
381AST_CORE_CAPI errc_t aDateTimeParseGregorian(StringView str, DateTime& dttm);
382
383
384
390AST_CORE_CAPI errc_t aDateTimeParseGregorianEn(StringView str, DateTime& dttm);
391
392
398AST_CORE_CAPI errc_t aDateTimeParseGMT(StringView str, DateTime& dttm);
399
400
407AST_CORE_CAPI errc_t aDateTimeParse(StringView str, StringView format, DateTime& dttm);
408
409
415AST_CORE_CAPI errc_t aDateTimeParseAny(StringView str, DateTime& dttm);
416
417
420{
421public:
424 eUTC = 0,
425 eBJT = 8,
426 };
427public:
431 AST_CORE_API
432 static DateTime FromJD(const JulianDate& jd);
433
437 A_ALWAYS_INLINE
438 static DateTime FromJulianDate(const JulianDate& jd){return FromJD(jd);}
439
444 AST_CORE_API
445 static DateTime FromString(StringView str, StringView format);
446
450 AST_CORE_API
451 static DateTime FromString(StringView str);
452
455 AST_CORE_API
456 static DateTime FromGregorian(StringView str);
457
458
460 AST_CORE_API
461 static DateTime FromTm(const tm* time);
462
464 AST_CORE_API
465 static DateTime FromTimeTLocal(time_t time);
466
468 AST_CORE_API
469 static DateTime FromTimeTUTC(time_t time);
470
475 DateTime dttm;
476 aDateTimeParseAny(str, dttm);
477 return dttm;
478 }
479
480public:
481 const Date& date() const{return date_;}
482 Date& date() {return date_;}
483 const Time& time() const {return time_;}
484 Time& time() {return time_;}
485 int year() const {return date_.year();}
486 int& year() {return date_.year();}
487 int month() const {return date_.month();}
488 int& month() {return date_.month();}
489 int day() const {return date_.day();}
490 int& day() {return date_.day();}
491 int hour() const {return time_.hour();}
492 int& hour() {return time_.hour();}
493 int minute() const {return time_.minute();}
494 int& minute() {return time_.minute();}
495 double second() const {return time_.second();}
496 double& second() {return time_.second();}
497 int dayOfYear() const {return date_.dayOfYear();}
498 int dayOfWeek() const {return date_.dayOfWeek();}
499 double secOfDay() const {return time_.totalSecond();}
500 void setYear(int year) {date_.setYear(year);}
501 void setMonth(int month) {date_.setMonth(month);}
502 void setDay(int day) {date_.setDay(day);}
503 void setHour(int hour) {time_.setHour(hour);}
504 void setMinute(int minute) {time_.setMinute(minute);}
505 void setSecond(double second) {time_.setSecond(second);}
506public:
507 void normalize(){
508 aDateTimeNormalize(*this);
509 }
510 void normalizeUTC(){
512 }
513 void normalizeLocal(int timezone){
514 aDateTimeNormalizeLocal(*this, timezone);
515 }
516 void normalizeBJT(){
518 }
519 DateTime normalized() const{
520 DateTime dttm = *this;
521 dttm.normalize();
522 return dttm;
523 }
524 DateTime normalizedUTC() const{
525 DateTime dttm = *this;
526 dttm.normalizeUTC();
527 return dttm;
528 }
529 DateTime normalizedLocal(int timezone) const{
530 DateTime dttm = *this;
531 dttm.normalizeLocal(timezone);
532 return dttm;
533 }
534 DateTime normalizedBJT() const{
535 DateTime dttm = *this;
536 dttm.normalizeBJT();
537 return dttm;
538 }
539public:
541 bool isInf() const{return time_.isInf();}
542
544 std::string toString(int precision = 3) const{
545 std::string str;
546 aDateTimeFormatDefault(*this, str, precision);
547 return str;
548 }
549public:
550 void addYears(int years){
551 aDateTimeAddYears(*this, years);
552 }
553 void addMonths(int months){
554 aDateTimeAddMonths(*this, months);
555 }
556 void addDays(int days){
557 aDateTimeAddDays(*this, days);
558 }
559 void addDaysUTC(int days){
560 aDateTimeAddDaysUTC(*this, days);
561 }
562 void addDaysLocal(int days, int timezone){
563 aDateTimeAddDaysLocal(*this, days, timezone);
564 }
565 void addDaysBJT(int days){
566 aDateTimeAddDaysBJT(*this, days);
567 }
568 void addHours(int hours){
569 aDateTimeAddHours(*this, hours);
570 }
571 void addHoursUTC(int hours){
572 aDateTimeAddHoursUTC(*this, hours);
573 }
574 void addHoursLocal(int hours, int timezone){
575 aDateTimeAddHoursLocal(*this, hours, timezone);
576 }
577 void addHoursBJT(int hours){
578 aDateTimeAddHoursBJT(*this, hours);
579 }
580 void addMinutes(int minutes){
581 aDateTimeAddMinutes(*this, minutes);
582 }
583 void addMinutesUTC(int minutes){
584 aDateTimeAddMinutesUTC(*this, minutes);
585 }
586 void addMinutesLocal(int minutes, int timezone){
587 aDateTimeAddMinutesLocal(*this, minutes, timezone);
588 }
589 void addMinutesBJT(int minutes){
590 aDateTimeAddMinutesBJT(*this, minutes);
591 }
592 void addSeconds(double seconds){
593 aDateTimeAddSeconds(*this, seconds);
594 }
595 void addSecondsUTC(double seconds){
596 aDateTimeAddSecondsUTC(*this, seconds);
597 }
598 void addSecondsLocal(double seconds, int timezone){
599 aDateTimeAddSecondsLocal(*this, seconds, timezone);
600 }
601 void addSecondsBJT(double seconds){
602 aDateTimeAddSecondsBJT(*this, seconds);
603 }
604public:
605 DateTime& operator += (double sec)
606 {
607 this->second() += sec; // 适用于任何时间尺度,包括考虑闰秒的和不考虑闰秒的
608 return *this;
609 }
610 DateTime& operator -= (double sec)
611 {
612 this->second() -= sec; // 适用于任何时间尺度,包括考虑闰秒的和不考虑闰秒的
613 return *this;
614 }
615 DateTime operator + (double sec) const
616 {
617 auto dttm = DateTime{ *this };
618 dttm += sec;
619 return dttm;
620 }
621 DateTime operator -(double sec) const
622 {
623 auto dttm = DateTime{ *this };
624 dttm -= sec;
625 return dttm;
626 }
627
628public:
631};
632
633A_ALWAYS_INLINE
635{
636 DateTime dttm;
638 return dttm;
639}
640
641A_ALWAYS_INLINE
642DateTime aCurrentDateTimeUTC()
643{
644 DateTime dttm;
645 aCurrentDateTimeUTC(dttm);
646 return dttm;
647}
648
649
653AST_NAMESPACE_END
654
日期时间
定义 DateTime.hpp:420
static A_ALWAYS_INLINE DateTime FromJulianDate(const JulianDate &jd)
从儒略日数创建日期时间对象
定义 DateTime.hpp:438
static DateTime Parse(StringView str)
从字符串解析日期时间(任意格式)
定义 DateTime.hpp:474
ETimeZone
定义 DateTime.hpp:423
Date date_
日期
定义 DateTime.hpp:629
bool isInf() const
检查日期时间对象是否为无穷大
定义 DateTime.hpp:541
Time time_
时间
定义 DateTime.hpp:630
std::string toString(int precision=3) const
将日期时间对象转换为字符串表示
定义 DateTime.hpp:544
日期
定义 Date.hpp:120
儒略日
定义 JulianDate.hpp:86
时间
定义 Time.hpp:54
void aDateTimeAddMinutesBJT(DateTime &dttm, int minutes)
增加分(北京时间)
定义 DateTime.cpp:264
errc_t aDateTimeParseRFC3339(StringView str, DateTime &dttm)
解析RFC 3339格式的日期时间字符串
定义 DateTime.cpp:413
void aDateTimeNormalizeUTC(DateTime &dttm)
规范化日期时间对象(按UTC时间规范化)
定义 DateTime.cpp:91
void aDateTimeAddSecondsBJT(DateTime &dttm, double seconds)
增加秒(北京时间)
定义 DateTime.cpp:286
void aDateTimeAddDaysBJT(DateTime &dttm, int days)
增加日(北京时间)
定义 DateTime.cpp:218
void aDateTimeAddYears(DateTime &dttm, int years)
增加年
定义 DateTime.cpp:193
errc_t aDateTimeParseGMT(StringView str, DateTime &dttm)
解析GMT格式的日期时间字符串
定义 DateTime.cpp:474
void aDateTimeAddHours(DateTime &dttm, int hours)
增加时
定义 DateTime.cpp:223
A_ALWAYS_INLINE errc_t aDateTimeFormatISO(const DateTime &dttm, std::string &str)
格式化日期时间为简单ISO 8601格式
定义 DateTime.hpp:295
void aTodayDateTimeUTC(DateTime &dttm)
获取今日00:00:00 UTC日期时间
定义 DateTime.cpp:68
void aDateTimeAddHoursLocal(DateTime &dttm, int hours, int timezone)
增加时(本地时间)
定义 DateTime.cpp:235
void aDateTimeAddMinutesLocal(DateTime &dttm, int minutes, int timezone)
增加分(本地时间)
定义 DateTime.cpp:257
errc_t aDateTimeFormatGregorian(const DateTime &dttm, std::string &str, int precision)
格式化日期时间为格里高利历格式
定义 DateTime.cpp:316
errc_t aDateTimeFormatGMT(const DateTime &dttm, std::string &str)
格式化日期时间为GMT格式
定义 DateTime.cpp:339
void aDateTimeAddDaysLocal(DateTime &dttm, int days, int timezone)
增加日(本地时间)
定义 DateTime.cpp:213
void aDateTimeAddHoursBJT(DateTime &dttm, int hours)
增加时(北京时间)
定义 DateTime.cpp:241
AST_CORE_CAPI errc_t aDateTimeParse(StringView str, StringView format, DateTime &dttm)
解析自定义格式的日期时间字符串
定义 DateTimeParse.cpp:562
void aDateTimeAddSecondsLocal(DateTime &dttm, double seconds, int timezone)
增加秒(本地时间)
定义 DateTime.cpp:281
errc_t aDateTimeParseAny(StringView str, DateTime &dttm)
解析任意格式的日期时间字符串
定义 DateTime.cpp:508
void aDateTimeAddHoursUTC(DateTime &dttm, int hours)
增加时(UTC时间)
定义 DateTime.cpp:229
void aDateTimeAddDays(DateTime &dttm, int days)
增加日
定义 DateTime.cpp:203
void aDateTimeAddMinutes(DateTime &dttm, int minutes)
增加分
定义 DateTime.cpp:247
errc_t aDateTimeParseGregorian(StringView str, DateTime &dttm)
解析格里高利历格式的日期时间字符串
定义 DateTime.cpp:420
void aDateTimeAddDaysUTC(DateTime &dttm, int days)
增加日(UTC时间)
定义 DateTime.cpp:208
void aDateTimeAddMonths(DateTime &dttm, int months)
增加月
定义 DateTime.cpp:198
A_ALWAYS_INLINE errc_t aDateTimeFormatDefault(const DateTime &dttm, std::string &str, int precision=kTimeDefaultFormatPrecision)
格式化日期时间为默认格式
定义 DateTime.hpp:340
void aDateTimeAddMinutesUTC(DateTime &dttm, int minutes)
增加分(UTC时间)
定义 DateTime.cpp:252
errc_t aDateTimeFormatGregorianEn(const DateTime &dttm, std::string &str, int precision)
格式化日期时间为格里高利历格式(英文)
定义 DateTime.cpp:327
errc_t aDateTimeFormatISO8601(const DateTime &dttm, std::string &str)
格式化日期时间为ISO 8601格式
定义 DateTime.cpp:293
void aDateTimeNormalizeLocal(DateTime &dttm, int timezone)
规范化日期时间对象(按本地时间规范化)
定义 DateTime.cpp:174
void aTomorrowDateTimeUTC(DateTime &dttm)
获取明天00:00:00 UTC日期时间
定义 DateTime.cpp:74
void aDateTimeAddSecondsUTC(DateTime &dttm, double seconds)
增加秒(UTC时间)
定义 DateTime.cpp:276
void aCurrentDateTimeLocal(DateTime &dttm)
获取当前本地日期时间
定义 DateTime.cpp:56
void aDateTimeAddSeconds(DateTime &dttm, double seconds)
增加秒
定义 DateTime.cpp:271
void aDateTimeNormalizeBJT(DateTime &dttm)
规范化日期时间对象(按北京时间规范化)
定义 DateTime.cpp:188
AST_CORE_CAPI errc_t aDateTimeFormat(const DateTime &dttm, StringView format, std::string &str)
格式化日期时间为字符串
定义 DateTimeFormat.cpp:117
void aCurrentDateTimeUTC(DateTime &dttm)
获取当前UTC日期时间
定义 DateTime.cpp:62
errc_t aDateTimeParseGregorianEn(StringView str, DateTime &dttm)
解析格里高利历格式(英文)的日期时间字符串
定义 DateTime.cpp:441
void aDateTimeNormalize(DateTime &dttm)
规范化日期时间对象
定义 DateTime.cpp:81
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
Unit minute
分钟,不要命名为min,容易与std::min冲突
定义 Unit.cpp:467
Unit day
天
定义 Unit.cpp:470
Unit hour
小时
定义 Unit.cpp:468
Unit sec
秒
定义 Unit.cpp:464