2012-10-28 51 views
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

'_ticksPerSecond'爲100,但允許傳遞毫秒數。例如,2秒和567毫秒給出2 * 100 + 567 = 767'個刻度,這由您的規模,等於7秒和67毫秒。改變這也可以是使用'60 * _ticksPerSecond','60 * _ticksPerMinute'等等的一個很好的教訓,而不是僅僅是6000,360000等。它允許你只改變一個基於它而改變的那個,並且使得很明顯,你正在使用60秒/分鐘等。 – chris

+0

這是一個很好的觀點......這是可能的我的老師(因爲這是一個家庭作業,我正在努力)作出了一個定義錯誤,或者我需要做比預期更多的數學...... –

+0

@ Hobo42:評論使它清楚地表明一個嘀嗒和一個毫秒是完全不同的。 –

回答

1

如果您的測量單位爲1/100 s,則簡單地存儲和恢復n % 100,即分數秒部分。

(如果你實際上存儲毫秒,那麼它的n % 1000,當然)。

+0

這似乎正是我所需要的!現在我只需要看看這是否適用於我需要保留毫秒(我現在理解的可能不完全是毫秒)和秒數的下一種情況。 –

+0

我正在推翻它哈哈,這完美的作品,我需要什麼,謝謝! –

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; 
} 

類似的代碼將在其他地方工作。

相關問題