【问题标题】:String.Format and TimeSpan issuesString.Format 和 TimeSpan 问题
【发布时间】:2017-01-20 03:22:21
【问题描述】:

我刚开始使用 Unity,在我的代码设计器 VS 中工作时不知道如何正确调试脚本。

我在脚本中有这段代码,它不会给我想要的格式:

private string GetTimeElapsedAsString()
{
    TimeSpan timeElapsed = DateTime.Now.Subtract(_startTime);
    return string.Format("{0:mm} {1:ss} {2:ff}", timeElapsed.TotalMinutes,   timeElapsed.TotalSeconds, timeElapsed.TotalMilliseconds);
}

我想要的是这样的:给定格式的“00:07:32”:“mm:ss:ff”

我只想要最简单的方法来切断每个时间单位的 2 位数字以外的所有数字。 有什么想法吗?

问候卡林。

编辑(已进行): 我修改了代码。现在看起来像这样:

private string GetTimeElapsedAsString()
{
    TimeSpan timeElapsed = DateTime.Now.Subtract(_startTime);
    return string.Format("{0:00}:{1:00}:{2:00}", timeElapsed.Minutes, timeElapsed.Seconds, timeElapsed.Milliseconds);
}

当我去测试我的游戏时,我仍然得到 3 位数字显示毫秒 - 为什么会发生这种情况??

看起来像这样: UI Text component in Unity

编辑: 我找到了上一个问题的解决方案:

return string.Format("{0:00}:{1:00}:{2}", timeElapsed.Minutes, timeElapsed.Seconds, timeElapsed.Milliseconds.ToString().Substring(0,2));

我只需要创建一个 .Substring(0,2) 只包含整数的前 2 个数字。

感谢那些试图提供帮助的人! 看起来不错!:

Working Example

干杯!

【问题讨论】:

    标签: c# unity3d timespan string.format


    【解决方案1】:

    您将三个数字传递给Format()

    数字无法识别 ``m,s, orf`,因此它们只打印文字字符。

    您希望格式字符串 00 将每个数字填充为两位数。

    另外,你实际上并不想要.Total*;请参阅文档。

    【讨论】:

    • 感谢这项工作! :) 你能告诉我天气有更好的方法吗?另外,我可以在 IFormatProvider 中做些什么来在每个单元之间添加“:”吗?
    • 您可以将:s 放入字符串本身。
    • 谢谢! - 你能看看我在帖子中的编辑吗? - 似乎我在最后一种格式(毫秒)中得到 3 位数字。
    • @Kalrin:因为你传递了一个三位数的数字。你期待什么?
    • 我预计此代码:{2:00} 会切断前两位数字之后的每个数字?
    【解决方案2】:

    建议你试试

     ts.ToString("mm:ss:ff");
    

    【讨论】:

    • Unity 可能不支持;它被添加到一个相当新的框架版本中。
    • 我试过这个:return (timeElapsed.Minutes + timeElapsed.Seconds + timeElapsed.Milliseconds).ToString("mm:ss:ff"); - 没用 - 没有任何东西传递给 Text 组件。
    • @Kalrin:该格式字符串适用于TimeSpan,而不是数字。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多