0

我有一个循环,在每个循环中,我得到应用程序运行的当前秒数,然后我想将这个时间转换为秒计算到的天数、小时和秒数,但不是我需要的“实时”能够自定义一天中有多少秒,我已经在 SO 和网络上尝试过示例,但似乎没有任何内容。我有一些定义

#define DAY             1200
#define HOUR            DAY / 24
#define MINUTE          HOUR / 60
#define SECOND          MINUTE / 60

所以在我的定义中,一天将持续 1200 秒。然后我一直在尝试将经过的秒数转换为“我的”秒数

seconds_passed = fmodf(SECOND, (float)(GetTicks() / 1000));

它返回 SECOND 等于 (0.013889) 但是每个循环都是相同的,它永远不会改变我想我只能转换例如:1real 秒到 1.25fake 秒然后

Minute = (seconds_passed / MINUTE);
seconds_passed = fmodf(seconds_passed, MINUTE);

计算自应用程序启动以来已经过去了多少(假)分钟、(假)小时和(假)天。

希望这是有道理的,谢谢你的时间。

4

2 回答 2

1

由于您想自定义一天中有多少秒,您真正要做的就是更改 1 秒:1 秒的比例。

例如,如果您一天中有 1200 秒,那么您的比率是:
1:72
也就是说,您一天中每过 1 秒,它等于 72 实际秒。

所以是的,基本上你在程序中需要做的就是找到 1 秒与 1 秒的比率,乘以你经过的秒数以获得“假”秒,然后使用该值......代码可能看起来像这个:

// get the ratio second:fake_second
#define REAL_DAY_SECONDS 86400
int ratio = REAL_DAY_SECONDS / DAY;

fake_to_real = fake_second*ratio;
real_to_fake = real_second/ratio;
于 2012-04-16T03:47:51.863 回答
0

您可以使用 chrono 中的一行来制作自己的持续时间:

using fake_seconds = std::chrono::duration<float, std::ratio<72,1>>; 

一些示例代码

#include <iostream>
#include <chrono>
using namespace std::chrono_literals;

using fake_seconds = std::chrono::duration<float, std::ratio<72,1>>;
 
int main()
{
    auto f_x = fake_seconds(350s);
    std::cout << "350 real seconds are:\n" << f_x.count() << " fake_seconds\n";
}

https://godbolt.org/z/f5G86avxr

于 2021-10-13T08:33:19.597 回答