0

質問を明確に説明するのが難しいので、質問のタイトルが奇妙に思えたらすみません。

タイムクラスを作っています。

私はこれらの変数を使用しています: プライベート、 _ticks :

  // 1 _ticks = 1/100 of a second
  // 0 _ticks = 00:00:00.00 i.e. 12:00am
  // a time is stored as a number of ticks since midnight
  // for example 1234567 ticks would be 3:25:45.67am
  long _ticks;

  // the following static fields might come in handy
  // 8,643,999 _ticks = 23:59:59.99 i.e. 11:59:59.99pm
  static const long _lastTickOfTheDay = 8639999;
  // 4,320,000 _ticks = 12:00:00.00 i.e 12pm i.e. noon
  static const long _noon = 4320000;
  // _ticks per second;
  static const long _ticksPerSecond  = 100;
  // _ticks per minute;
  static const long _ticksPerMinute = 6000;
  // _ticks per hour;
  static const long _ticksPerHour = 360000;
  // _ticks per day
  static const long _ticksPerDay = 8640000;

ということで、時、分、秒、ミリ秒で時間を設定する関数を作っています。これらすべての変数を使用して時間を設定するのは非常に簡単です。

void MyTime::SetTime(int newHrs, int newMins, int newSecs, int newMilisecs)
{
    this->_ticks = (newHrs * _ticksPerHour) + (newMins * _ticksPerMinute) 
            + (newSecs * _ticksPerSecond) + (newMilisecs);
}

次に、ミリ秒を維持しながら、時間、分、秒のみを設定する必要があります。これを行う方法の計算は私にはわかりませんが、これは私ができる限りのことです. ご覧のとおり、それほど多くはありません。

// Hours, Minutes, Seconds
void MyTime::SetTime(int newHours, int newMinutes, int newSeconds)
{
    // Take the ticks apart and put them back together
    int oldTime = _ticks;
    int newTime = (newHours * _ticksPerHour) + (newMinutes * _ticksPerMinute) 
            + (newSeconds * _ticksPerSecond);
}
4

2 に答える 2

2

各部分を抽出するメソッドを書く価値があるかもしれません:

int MyTime::hours() {
  return _ticks / _ticksPerHour;
}
int MyTime::minutes() {
  return (_ticks % _ticksPerHour) / _ticksPerMinute;
}
int MyTime::seconds() {
  return (_ticks % _ticksPerMinute) / _ticksPerSecond;
}
int MyTime::millis() {
  return _ticks % _ticksPerSecond;
}

これらは整数演算を使用し、/%はそれぞれ商と剰余を与えます。

これらのいずれかで個別の更新を実行するには、現在の値に対する差分を計算し、それを追加するだけです。たとえば、次のようになります。

void MyTime::setMinutes(int newMinutes) {
  _ticks += (newMinutes - minutes())*_ticksPerMinute;
}

他の部分でも同様のコードが機能します。

于 2012-10-28T03:28:27.867 に答える
1

測定単位が 1/100 秒の場合は、単純に保存して復元しn % 100ます。つまり、小数秒の部分です。

(実際にミリ秒を保存している場合はn % 1000、もちろんです。)

于 2012-10-28T03:08:44.827 に答える