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
00019
00020
00021
00022
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
00032
00033
00034
00035
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
00045
00046
00047
00048
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
00058
00059
00060
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
00071
00072
00073
00074
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
00084
00085
00086
00087
00088
00089 inline Time_Clock operator-(const Time_Clock &tm, const Time_Span &ts)
00090 {
00091 return TimeDifference(tm, ts);
00092 }
00093
00094
00095
00096
00097
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
00108
00109
00110
00111
00112
00113 inline Time_Span operator-(const Time_Clock &tm1, const Time_Clock &tm2)
00114 {
00115 return TimeDifference(tm1, tm2);
00116 }
00117
00118
00119
00120
00121
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
00137
00138
00139
00140
00141 inline std::string GetTimeStr()
00142 {
00143 return GetTimeStr(Time_Clock::GetCurrentTime());
00144 }
00145
00146
00147
00148
00149
00150
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__