最近在学习muduo网络库源码,小结一下日期和时间计算。
概念
GMT(UT)、UTC、AD、CE、BC等略。参考:http://www.hermetic.ch/cal_stud/jdn.htm
儒略日(Julian day number, 这里简称为JD)起始时间为GMT -4712-01-01(i.e.4713 B.C.),中午12时。此刻2015年11月8日18:00:00的儒略日是2457335.25,0.1表示2.4小时、144分钟或者8640秒,以此类推。由于儒略日数字位数太多,国际天文学联合会于1973年采用修订后的儒略日(MJD),其定义为 MJD = JD – 2400000.5。MJD相应的起点是GMT 1858-11-17,0时。计算机的UNIX time是从GMT 1970-01-01, 0时开始至今的秒数。因此,UNIX time = (JD – 2440587.5) × 86400。年月日和JD可以通过公式互相转化,即muduo中的muduo::detail::getJulianDayNumber、muduo::detail::getYearMonthDay函数。muduo中muduo::Date::kJulianDayOf1970_01_01 值为 2440588,也就是起点设为0时了。
时区、闰秒等概念参考man tzfile,http://stackoverflow.com/questions/6317388/timezone-database-file-format-question
相关函数和结构
struct tm
gmtime_r
gettimeofday,X86_64不需要进入内核,参考:http://blog.csdn.net/russell_tao/article/details/7185588
timgm
互相转换如图所示:( 参考:http://www.cnblogs.com/yaozhongxiao/archive/2013/04/14/3020353.html)