Panda3D
|
00001 #ifndef __TIME_GENERAL_H__ 00002 #define __TIME_GENERAL_H__ 00003 00004 00005 Time_Span TimeDifference(const Time_Clock &time1, const Time_Clock &time2); 00006 Time_Clock TimeDifference( const Time_Clock &time1, const Time_Span &Time_Span); 00007 Time_Clock TimeAddition(const Time_Clock &time1, Time_Span &Time_Span); 00008 00009 00010 Time_Clock operator+(const Time_Clock &tm, const Time_Span &ts); 00011 Time_Clock operator-(const Time_Clock &tm, const Time_Span &ts); 00012 00013 00014 bool SetFromTimeStr(const char * str, Time_Clock & outtime); 00015 std::string GetTimeStr(const Time_Clock & intime); 00016 00017 ////////////////////////////////////////////////////////////// 00018 // Function name : TimeDifference 00019 // Description : 00020 // Return type : inline Time_Span 00021 // Argument : const Time_Clock &time1 00022 // Argument : const Time_Clock &time2 00023 ////////////////////////////////////////////////////////////// 00024 inline Time_Span TimeDifference(const Time_Clock &time1, const Time_Clock &time2) 00025 { 00026 timeval ans; 00027 TimeDif(time2.GetTval(), time1.GetTval(), ans); 00028 return Time_Span(ans); 00029 } 00030 ////////////////////////////////////////////////////////////// 00031 // Function name : TimeDifference 00032 // Description : 00033 // Return type : 00034 // Argument : const Time_Clock &time1 00035 // Argument : const Time_Span &Time_Span 00036 ////////////////////////////////////////////////////////////// 00037 inline Time_Clock TimeDifference( const Time_Clock &time1, const Time_Span &Time_Span) 00038 { 00039 timeval ans; 00040 TimeDif(Time_Span.GetTval(), time1.GetTval(), ans); 00041 return Time_Clock(ans); 00042 } 00043 ////////////////////////////////////////////////////////////// 00044 // Function name : TimeAddition 00045 // Description : 00046 // Return type : 00047 // Argument : const Time_Clock &time1 00048 // Argument : Time_Span &Time_Span 00049 ////////////////////////////////////////////////////////////// 00050 inline Time_Clock TimeAddition(const Time_Clock &time1, Time_Span &Time_Span) 00051 { 00052 timeval ans; 00053 TimeAdd(time1.GetTval(), Time_Span.GetTval(), ans); 00054 return Time_Clock(ans); 00055 } 00056 ////////////////////////////////////////////////////////////// 00057 // Function name : Time_Clock& Time_Clock::operator+= 00058 // Description : 00059 // Return type : inline const 00060 // Argument : Time_Span &Time_Span 00061 ////////////////////////////////////////////////////////////// 00062 inline const Time_Clock& Time_Clock::operator+=(const Time_Span &Time_Span) 00063 { 00064 _my_time.tv_usec += Time_Span._my_time.tv_usec; 00065 _my_time.tv_sec += Time_Span._my_time.tv_sec; 00066 NormalizeTime(_my_time); 00067 return *this; 00068 } 00069 ////////////////////////////////////////////////////////////// 00070 // Function name : operator+ 00071 // Description : 00072 // Return type : inline Time_Clock 00073 // Argument : const Time_Clock &tm 00074 // Argument : const Time_Span &ts 00075 ////////////////////////////////////////////////////////////// 00076 inline Time_Clock operator+(const Time_Clock &tm, const Time_Span &ts) 00077 { 00078 Time_Clock work(tm); 00079 work += ts; 00080 return work; 00081 } 00082 ////////////////////////////////////////////////////////////// 00083 // Function name : operator- 00084 // Description : 00085 // Return type : inline Time_Clock 00086 // Argument : const Time_Clock &tm 00087 // Argument : const Time_Span &ts 00088 ////////////////////////////////////////////////////////////// 00089 inline Time_Clock operator-(const Time_Clock &tm, const Time_Span &ts) 00090 { 00091 return TimeDifference(tm, ts); 00092 } 00093 ////////////////////////////////////////////////////////////// 00094 // Function name : Time_Clock& Time_Clock::operator-= 00095 // Description : 00096 // Return type : inline const 00097 // Argument : Time_Span &Time_Span 00098 ////////////////////////////////////////////////////////////// 00099 inline const Time_Clock& Time_Clock::operator-=(const Time_Span &Time_Span) 00100 { 00101 _my_time.tv_usec -= Time_Span._my_time.tv_usec; 00102 _my_time.tv_sec -= Time_Span._my_time.tv_sec; 00103 NormalizeTime(_my_time); 00104 return *this; 00105 } 00106 ////////////////////////////////////////////////////////////// 00107 // Function name : operator- 00108 // Description : 00109 // Return type : inline Time_Span 00110 // Argument : const Time_Clock &tm1 00111 // Argument : const Time_Clock &tm2 00112 ////////////////////////////////////////////////////////////// 00113 inline Time_Span operator-(const Time_Clock &tm1, const Time_Clock &tm2) 00114 { 00115 return TimeDifference(tm1, tm2); 00116 } 00117 ////////////////////////////////////////////////////////////// 00118 // Function name : char * GetTimeStr 00119 // Description : 00120 // Return type : inline const 00121 // Argument : const Time_Clock & intime 00122 ////////////////////////////////////////////////////////////// 00123 inline std::string GetTimeStr(const Time_Clock & intime) 00124 { 00125 static std::string ts; 00126 static Time_Clock prev_time; 00127 00128 if (prev_time != intime || ts.empty()) 00129 { 00130 ts = intime.Format("%Y-%m-%d %H:%M:%S"); 00131 prev_time = intime; 00132 } 00133 return ts; 00134 } 00135 ////////////////////////////////////////////////////////////// 00136 // Function name : GetTimeStr 00137 // Description : 00138 // Return type : inline std::string 00139 // Argument : void 00140 ////////////////////////////////////////////////////////////// 00141 inline std::string GetTimeStr() 00142 { 00143 return GetTimeStr(Time_Clock::GetCurrentTime()); 00144 } 00145 ////////////////////////////////////////////////////////////// 00146 // Function name : SetFromTimeStr 00147 // Description : 00148 // Return type : inline bool 00149 // Argument : const char * str 00150 // Argument : Time_Clock & outtime 00151 ////////////////////////////////////////////////////////////// 00152 inline bool SetFromTimeStr(const char * str, Time_Clock & outtime) 00153 { 00154 int year = 0; 00155 int month = 0; 00156 int day = 0; 00157 int hour = 0; 00158 int min = 0; 00159 int sec = 0; 00160 00161 if (sscanf(str, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &min, &sec) != 6) 00162 return false; 00163 00164 outtime.Set(year, month, day, hour, min, sec); 00165 return true; 00166 } 00167 00168 #endif //__TIME_GENERAL_H__