0

今月末(2015年6月)にうるう秒が追加されることを知りました。私は自分の時間のクラスを管理しているので、それについて少し恐れています. 十分に頑丈かどうかはわかりません。

atからのミリ秒数でInstantあるunsigned long long intメンバー変数を操作するクラスを作成しました。ms01/01/16000: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ますか? どのように ?

2 番目の質問は、人間が読める形式への変換についてです。私の関数は非常に大きいため、ここには投稿しません (必要に応じて投稿できます) が、アイデアは次のとおりです。

  • 最初に現在の日の秒数を計算し、次に分数と時間数を計算します。
  • 今日から何日か前の日数を計算します。
  • 次に、400 年のサイクル数 (周期プロセス)、現在の 400 年のサイクルにおける 100 年のサイクル数、および現在の 4 年のサイクルにおける 4 年のサイクル数を計算します。
  • そこから、年 (うるうかどうか)、月、日、曜日を推測します。
  • 次に、サマータイムが有効になっているかどうかを確認し、ゾーンに従って値を更新します (ヨーロッパ、2007 年以前の米国、2007 年以降の米国)。
  • 1970 年から追加された 25 うるう秒を考慮に入れていません。

秒数が に制限されているため、今のところ、私のクラスは「ここにいます」と言うことができませ30/06/2015ん。しかし、それを管理する方法がわからないためでもあります。良い方法は何ですか?23:59:6059

4

0 に答える 0