1. Time Format and ExamplesString-time: "04:05:06 + 0700"
Struct-time: struct TM {
Tm_sec = 6,
Tm_min = 5,
Tm_hour = 4,
Tm_mday = 3,
Tm_mon = 1,
Tm_year = 101,
Tm_wday = ?,
Tm_yday = ?,
Tm_isdst = ?,
_ Tm_gmtoff = 25200,/* = 7*3600 */
_ Tm_zone = 0x ??? "??? "
}
Long-time: 12345678/* seconds elapsed since 1970.1.1 0: 0 */
2. For communication: String-time is best, as RFC 822 defined.
For time comparing and save into DB, long-time is best.
Struct-time, used between string-time and long-time, and for time changing.
3. Long-time lost the time zone info.
4. Standard-time, remote-time and local-time
Standard-time: UTC time (former GMT time), offset = 0
Local-time: local Linux time and time zone, offset = +/-xxxx
Reomote-time: Time and time-zone on remote site in communication, offset = +/-yyyy
5. glibc (Library) is weak on time functions.
Strptime (): String-Time to struct-time, with user time zone (only for 2.6.x ).
Strftime (): struct-Time to string-time, with user time zone.
Timegm (): struct-Time to long-time, lost time zone.
Mktime (): struct-Time to long-time, with local time zone.
Gmtime_r (): long-time to struct-time, no time zone.
Localtime_r (): long-time to struct-time, with local time zone.
Time (): long-time, lost local time zone.
Timezone: Local Time Zone offset
6. Principle of time programming.
6.1 save long-time into DB. This long-time is Standard Time (UTC time ).
For the parameters of function, use UTC long-time as the time format.
6.2 for incoming data, containing string-time, call strptime () to convert
Struct-time, and keep time zone in a independent variable (for Linux 2.4.x, get
The time zone from the string by yourself), then call timegm () to convert
Long-time, then Minus time-zone in the variable, to get UTC long-time.
6.3 For outgoing data, as a UTC long-time, if the time zone is local, call
Localtime_r () to convert to a struct-time, with time zone (local), then
Call strftime () to get a string-time, with time zone (local ).
6.4 for outgoing data, as a UTC long-time, if the time zone is user, before this
Shocould somewhere a variable saved the offset, add the time zone offset to
Long-time, then call gmtime_r () to get a struct-time, no time zone, then set
The tm_gmtoff of struct time with the offset in the variable, then call
Strftime () to get a string-time, with time zone (user ).
6.5 for local config file, containing string-time, shocould save the time
Time zone, for getting correct time after time zone changed. Otherwise,
Always save UTC long-time or UTC string-time in config file.