add ClockTime
This commit is contained in:
		
							parent
							
								
									5d7c3f4f9a
								
							
						
					
					
						commit
						dc6dd682ff
					
				|  | @ -98,6 +98,88 @@ Time Time::Now() noexcept | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | //-------------------------------------------------------
 | ||||||
|  | // ClockTime
 | ||||||
|  | //-------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  | ClockTime::ClockTime() | ||||||
|  |     : ms_since_epoch_(0) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | long ClockTime::GetTimeStamp() const | ||||||
|  | { | ||||||
|  |     using std::chrono::duration_cast; | ||||||
|  |     using std::chrono::milliseconds; | ||||||
|  |     using std::chrono::seconds; | ||||||
|  | 
 | ||||||
|  |     const auto timestamp = duration_cast<seconds>(milliseconds(ms_since_epoch_)).count(); | ||||||
|  |     return static_cast<long>(timestamp); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | long ClockTime::GetMillisecondsSinceEpoch() const | ||||||
|  | { | ||||||
|  |     return ms_since_epoch_; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::time_t ClockTime::GetCTime() const | ||||||
|  | { | ||||||
|  |     return static_cast<time_t>(GetTimeStamp()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ClockTime::ClockTime(long ms_since_epoch) | ||||||
|  |     : ms_since_epoch_(ms_since_epoch) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ClockTime ClockTime::FromTimeStamp(long timestamp) noexcept | ||||||
|  | { | ||||||
|  |     using std::chrono::duration_cast; | ||||||
|  |     using std::chrono::milliseconds; | ||||||
|  |     using std::chrono::seconds; | ||||||
|  | 
 | ||||||
|  |     const auto ms = duration_cast<milliseconds>(seconds(timestamp)).count(); | ||||||
|  |     return ClockTime(static_cast<long>(ms)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ClockTime ClockTime::Now() noexcept | ||||||
|  | { | ||||||
|  |     using std::chrono::duration_cast; | ||||||
|  |     using std::chrono::milliseconds; | ||||||
|  |     using std::chrono::system_clock; | ||||||
|  | 
 | ||||||
|  |     const auto      now   = system_clock::now(); | ||||||
|  |     const long long count = duration_cast<milliseconds>(now.time_since_epoch()).count(); | ||||||
|  |     return ClockTime{ static_cast<long>(count) }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const Duration ClockTime::operator-(const ClockTime& other) const | ||||||
|  | { | ||||||
|  |     return Duration(ms_since_epoch_ - other.ms_since_epoch_); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const ClockTime ClockTime::operator+(const Duration& dur) const | ||||||
|  | { | ||||||
|  |     return ClockTime{ ms_since_epoch_ + dur.Milliseconds() }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const ClockTime ClockTime::operator-(const Duration& dur) const | ||||||
|  | { | ||||||
|  |     return ClockTime{ ms_since_epoch_ - dur.Milliseconds() }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ClockTime& ClockTime::operator+=(const Duration& other) | ||||||
|  | { | ||||||
|  |     ms_since_epoch_ += other.Milliseconds(); | ||||||
|  |     return (*this); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ClockTime& ClockTime::operator-=(const Duration& other) | ||||||
|  | { | ||||||
|  |     ms_since_epoch_ -= other.Milliseconds(); | ||||||
|  |     return (*this); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| //-------------------------------------------------------
 | //-------------------------------------------------------
 | ||||||
| // Duration
 | // Duration
 | ||||||
| //-------------------------------------------------------
 | //-------------------------------------------------------
 | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| #include <kiwano/core/Common.h> | #include <kiwano/core/Common.h> | ||||||
|  | #include <ctime> | ||||||
| 
 | 
 | ||||||
| namespace kiwano | namespace kiwano | ||||||
| { | { | ||||||
|  | @ -198,6 +199,49 @@ private: | ||||||
|     long dur_; |     long dur_; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * \~chinese | ||||||
|  |  * @brief 时钟时间 | ||||||
|  |  */ | ||||||
|  | struct KGE_API ClockTime | ||||||
|  | { | ||||||
|  |     ClockTime(); | ||||||
|  | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 获取当前时间戳
 | ||||||
|  |     long GetTimeStamp() const; | ||||||
|  | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 获取自纪元以来的毫秒数
 | ||||||
|  |     long GetMillisecondsSinceEpoch() const; | ||||||
|  | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 获取 C 风格的时间
 | ||||||
|  |     std::time_t GetCTime() const; | ||||||
|  | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 获取当前时间
 | ||||||
|  |     static ClockTime Now() noexcept; | ||||||
|  | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 时间戳转化为时间
 | ||||||
|  |     static ClockTime FromTimeStamp(long timestamp) noexcept; | ||||||
|  | 
 | ||||||
|  |     const Duration operator-(const ClockTime&) const; | ||||||
|  | 
 | ||||||
|  |     const ClockTime operator+(const Duration&) const; | ||||||
|  |     const ClockTime operator-(const Duration&) const; | ||||||
|  | 
 | ||||||
|  |     ClockTime& operator+=(const Duration&); | ||||||
|  |     ClockTime& operator-=(const Duration&); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     ClockTime(long ms_since_epoch); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     long ms_since_epoch_; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| inline long Duration::Milliseconds() const | inline long Duration::Milliseconds() const | ||||||
| { | { | ||||||
|     return milliseconds_; |     return milliseconds_; | ||||||
|  | @ -232,6 +276,7 @@ inline bool Time::IsZero() const | ||||||
| { | { | ||||||
|     return dur_ == 0; |     return dur_ == 0; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| }  // namespace kiwano
 | }  // namespace kiwano
 | ||||||
| 
 | 
 | ||||||
| #if defined(KGE_HAS_LITERALS) | #if defined(KGE_HAS_LITERALS) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue