分开存储秒数和毫秒数,绝大多数时候只需要秒数进行运算,大大减少了64位整数运算,提升效率。
解除对基类Object依赖,使用有符号整数替代无符号整数。
This commit is contained in:
parent
fb5f43c4d2
commit
0cad3f7c2b
|
@ -7,29 +7,32 @@
|
||||||
/************************************************ TimeSpan ************************************************/
|
/************************************************ TimeSpan ************************************************/
|
||||||
TimeSpan::TimeSpan(Int64 ms)
|
TimeSpan::TimeSpan(Int64 ms)
|
||||||
{
|
{
|
||||||
Ms = ms;
|
_Seconds = ms / 1000;
|
||||||
|
_Ms = ms % 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
TimeSpan::TimeSpan(int hours, int minutes, int seconds) : TimeSpan(0, hours, minutes, seconds) { }
|
TimeSpan::TimeSpan(int hours, int minutes, int seconds) : TimeSpan(0, hours, minutes, seconds) { }
|
||||||
|
|
||||||
TimeSpan::TimeSpan(int days, int hours, int minutes, int seconds)
|
TimeSpan::TimeSpan(int days, int hours, int minutes, int seconds)
|
||||||
{
|
{
|
||||||
int val = days * 24 * 3600 + hours * 3600 + minutes * 60 + seconds;
|
_Seconds = ((days * 24 + hours) * 60 + minutes) * 60 + seconds;
|
||||||
Ms = (Int64)val * 1000ULL;
|
_Ms = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TimeSpan::Days() const { return Ms / (24 * 60 * 60 * 1000); }
|
int TimeSpan::Days() const { return _Seconds / (24 * 60 * 60); }
|
||||||
int TimeSpan::Hours() const { return Ms / (60 * 60 * 1000) % 24; }
|
int TimeSpan::Hours() const { return _Seconds / (60 * 60) % 24; }
|
||||||
int TimeSpan::Minutes() const { return Ms / (60 * 1000) % 60; }
|
int TimeSpan::Minutes() const { return _Seconds / 60 % 60; }
|
||||||
int TimeSpan::Seconds() const { return Ms / 1000 % 60; }
|
int TimeSpan::Seconds() const { return _Seconds % 60; }
|
||||||
int TimeSpan::TotalDays() const { return Ms / (24 * 60 * 60 * 1000); }
|
int TimeSpan::Ms() const { return _Ms; }
|
||||||
int TimeSpan::TotalHours() const { return Ms / (60 * 60 * 1000); }
|
int TimeSpan::TotalDays() const { return _Seconds / (24 * 60 * 60); }
|
||||||
int TimeSpan::TotalMinutes() const { return Ms / (60 * 1000); }
|
int TimeSpan::TotalHours() const { return _Seconds / (60 * 60); }
|
||||||
int TimeSpan::TotalSeconds() const { return Ms / 1000; }
|
int TimeSpan::TotalMinutes() const { return _Seconds / 60; }
|
||||||
|
int TimeSpan::TotalSeconds() const { return _Seconds; }
|
||||||
|
Int64 TimeSpan::TotalMs() const { return _Seconds * 1000LL + (Int64)_Ms; }
|
||||||
|
|
||||||
int TimeSpan::CompareTo(const TimeSpan& value) const
|
int TimeSpan::CompareTo(const TimeSpan& value) const
|
||||||
{
|
{
|
||||||
return Ms - value.Ms;
|
return _Ms - value._Ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator== (const TimeSpan& left, const TimeSpan& right) { return left.CompareTo(right) == 0; }
|
bool operator== (const TimeSpan& left, const TimeSpan& right) { return left.CompareTo(right) == 0; }
|
||||||
|
@ -39,9 +42,11 @@ bool operator< (const TimeSpan& left, const TimeSpan& right) { return left.Compa
|
||||||
bool operator>= (const TimeSpan& left, const TimeSpan& right) { return left.CompareTo(right) >= 0; }
|
bool operator>= (const TimeSpan& left, const TimeSpan& right) { return left.CompareTo(right) >= 0; }
|
||||||
bool operator<= (const TimeSpan& left, const TimeSpan& right) { return left.CompareTo(right) <= 0; }
|
bool operator<= (const TimeSpan& left, const TimeSpan& right) { return left.CompareTo(right) <= 0; }
|
||||||
|
|
||||||
String& TimeSpan::ToStr(String& str) const
|
String TimeSpan::ToString() const
|
||||||
{
|
{
|
||||||
if(Ms >= 24 * 60 * 60 * 1000) str = str + Days() + ' ';
|
String str;
|
||||||
|
|
||||||
|
if(_Seconds >= 24 * 60 * 60) str = str + Days() + ' ';
|
||||||
|
|
||||||
str = str + Hours() + ':';
|
str = str + Hours() + ':';
|
||||||
|
|
||||||
|
@ -53,7 +58,7 @@ String& TimeSpan::ToStr(String& str) const
|
||||||
if(sec < 10) str += '0';
|
if(sec < 10) str += '0';
|
||||||
str = str + sec;
|
str = str + sec;
|
||||||
|
|
||||||
int ms = Ms % 1000;
|
int ms = _Ms;
|
||||||
if(ms > 0)
|
if(ms > 0)
|
||||||
{
|
{
|
||||||
str += '.';
|
str += '.';
|
||||||
|
@ -66,3 +71,8 @@ String& TimeSpan::ToStr(String& str) const
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TimeSpan::Show(bool newLine) const
|
||||||
|
{
|
||||||
|
ToString().Show(newLine);
|
||||||
|
}
|
||||||
|
|
|
@ -2,11 +2,9 @@
|
||||||
#define __TimeSpan_H__
|
#define __TimeSpan_H__
|
||||||
|
|
||||||
// 时间间隔
|
// 时间间隔
|
||||||
class TimeSpan : public Object
|
class TimeSpan
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Int64 Ms;
|
|
||||||
|
|
||||||
TimeSpan(Int64 ms = 0);
|
TimeSpan(Int64 ms = 0);
|
||||||
TimeSpan(int hours, int minutes, int seconds);
|
TimeSpan(int hours, int minutes, int seconds);
|
||||||
TimeSpan(int days, int hours, int minutes, int seconds);
|
TimeSpan(int days, int hours, int minutes, int seconds);
|
||||||
|
@ -15,10 +13,12 @@ public:
|
||||||
int Hours() const;
|
int Hours() const;
|
||||||
int Minutes() const;
|
int Minutes() const;
|
||||||
int Seconds() const;
|
int Seconds() const;
|
||||||
|
int Ms() const;
|
||||||
int TotalDays() const;
|
int TotalDays() const;
|
||||||
int TotalHours() const;
|
int TotalHours() const;
|
||||||
int TotalMinutes() const;
|
int TotalMinutes() const;
|
||||||
int TotalSeconds() const;
|
int TotalSeconds() const;
|
||||||
|
Int64 TotalMs() const;
|
||||||
|
|
||||||
int CompareTo(const TimeSpan& value) const;
|
int CompareTo(const TimeSpan& value) const;
|
||||||
friend bool operator== (const TimeSpan& left, const TimeSpan& right);
|
friend bool operator== (const TimeSpan& left, const TimeSpan& right);
|
||||||
|
@ -28,7 +28,16 @@ public:
|
||||||
friend bool operator>= (const TimeSpan& left, const TimeSpan& right);
|
friend bool operator>= (const TimeSpan& left, const TimeSpan& right);
|
||||||
friend bool operator<= (const TimeSpan& left, const TimeSpan& right);
|
friend bool operator<= (const TimeSpan& left, const TimeSpan& right);
|
||||||
|
|
||||||
virtual String& ToStr(String& str) const;
|
String ToString() const;
|
||||||
|
void Show(bool newLine = true) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _Seconds;
|
||||||
|
int _Ms;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
分开存储秒数和毫秒数,绝大多数时候只需要秒数进行运算,大大减少了64位整数运算,提升效率。
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue