我刚刚得知本月底(2015 年 6 月)将添加闰秒。我对此有点害怕,因为我自己安排时间课程。我不确定它是否足够强大。
我创建了一个使用成员变量的类Instant
,该unsigned long long int
成员变量ms
是从01/01/1600
at开始的毫秒数0:00:00
。
当我想获取当前时间时,我调用这个函数:
void Instant::setCurrentTime()
{
struct timeval tv;
gettimeofday(&tv, NULL);
this->ms = NBR_DAYS_TO_EPOCH; // 135140
this->ms *= NBR_SECONDS_IN_DAY; // 86400
this->ms += tv.tv_sec;
this->ms *= NBR_MILLISECONDS_IN_SECOND; // 1000
this->ms += tv.tv_usec/1000;
}
我的第一个问题是:闰秒如何影响这个数字?是否已经在价值中考虑在内tv.tv_sec
?如何 ?
我的第二个问题是关于转换为人类可读格式的问题。我不在这里发布它,因为我的功能非常庞大(如果需要,我可以发布它),但想法如下:
- 我首先计算当天的秒数,然后计算分钟数和小时数;
- 我计算当天之前的天数;
- 然后我计算400年的周期数(周期过程),当前400年周期的100年周期数,4年当前周期的4年周期数;
- 从中,我推断出年份(是否闰)、月份、日期和星期几;
- 然后我检查是否激活了夏令时,并根据区域更新值(欧洲,2007 年之前的美国,2007 年之前的美国);
- 所有这些都没有考虑到从 1970 年开始增加的 25 个闰秒。
目前,我的班级不能说“我们30/06/2015
在23:59:60
”,因为我的秒数限制为59
. 但也因为我不知道如何管理它。什么是好方法?