如何从字符串中的时间戳获取所有字符

时间:2016-07-28 16:32:53

标签: c++

我正在完成一个有一定时间限制的游戏。为了 得到一个新的高分你需要比当前的高分要低的时间。 此时间将写入.txt文件,并在重新启动游戏时被检索。据说这是从.txt文件中检索的高分是一个字符串。为了减少或大于比较,Gametime应该转换为字符串。

我可以进行比较并将实际游戏时间转换为字符串,但转换不完整。如果实际游戏时间是转换时间的02:30而不是30.它会削减第一部分。

首先我把实际的游戏时间放在一个双倍: nGameTimer是一个柜台。     double GameTime =(nGameTimer / 60,nGameTimer%60);      nGameTimer / 60是分钟      nGameTimer%60是秒

为了将它转换为字符串我使用了我在研究期间发现的这种转换。

std::ostringstream sstream;
sstream << GameTime;
std::string varAsString = sstream.str();

我怀疑我对双重游戏时间的偏见是它首先出错的地方!

当我将其转换为字符串时,如何获得实际游戏时间的完整时间戳?

2 个答案:

答案 0 :(得分:0)

您的代码

double GameTime = (nGameTimer / 60 , nGameTimer % 60);

使用逗号运算符,等同于

double GameTime = nGameTimer % 60;

您不会需要这样的东西,可以直接进行转换。试试这个:

std::ostringstream sstream;
sstream << (nGameTimer / 60) << ':' << (nGameTimer % 60);
std::string varAsString = sstream.str();

答案 1 :(得分:0)

最后的注释......如果nGameTimer是总秒数,那就存储一下。并将其作为unsigned号读回(适用于32b平台上正确60年以下的游戏)。然后比较数字,较低的数字是更好的时间。

将时间保留为数字,只有当您向用户显示时,才创建实用程序辅助函数std::string formatGameDuration(const unsigned gameDuration),并使用该函数将数字转换为人格式化字符串。

在开发格式化程序时,使用单元测试来验证它是否确实为许多可能的输入(0s,9s,60s,599s,3600s和其他有趣的持续时间产生正确的字符串(期望可能&#34; 00:00&#34; ,&#34; 00:09&#34;,&#34; 01:00&#34;,&#34; 09:59&#34;,&#34; 1h +&#34;)。

记住未来的这种模式,特别是如果您将存储某些事件的日期+时间。始终将UTC时间存储在文件/数据库中,并仅在将其显示给人之前进行格式化(在这种情况下,通过格式化也意味着按输出的所需时区调整时间)。永远不要存储当地时间/日期,如果项目比预期的要大,它会导致很多麻烦。