0

我刚刚得知本月底(2015 年 6 月)将添加闰秒。我对此有点害怕,因为我自己安排时间课程。我不确定它是否足够强大。

我创建了一个使用成员变量的类Instant,该unsigned long long int成员变量ms是从01/01/1600at开始的毫秒数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/201523:59:60”,因为我的秒数限制为59. 但也因为我不知道如何管理它。什么是好方法?

4

0 回答 0