我无法清楚地描述我的问题,如果我的问题标题看起来很奇怪,请原谅。
我正在上课。
我正在使用这些变量: 私有,有_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);
}
答案 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;
}
类似的代码适用于其他部分。
答案 1 :(得分:1)
如果您的测量单位是1/100秒,那么只需存储并恢复n % 100
,即小数秒部分。
(如果您实际上存储的是毫秒,那么它当然是n % 1000
。)