【问题标题】:TimeSpan remove secondsTimeSpan 删除秒数
【发布时间】:2011-07-03 22:42:56
【问题描述】:

如何从 C# 中的时间跨度对象中截断秒位?即 15:37

我正在以 HH:mm 格式将时间跨度对象输出到 JavaScript,并且有点希望服务器端处理提供正确格式而不是客户端浏览器,这可以在不将其作为 C# 字符串对象提供给JavaScript?

【问题讨论】:

  • 如果您将时间跨度格式化为 HH:mm 秒数不是已经被截断了吗?
  • 您真的想在 TimeSpan 中将秒数设置为 0,还是在转换为字符串时忽略它们?
  • @CodeInChaos @fredrik-mork @Nick 是的,省略秒而不转换为字符串,我的 JSON 序列化程序需要获取 TimeSpan 格式的 hh:mm 而不转换为字符串
  • @Maya:TimeSpan 是一个值,而不是一个值的字符串表示形式。如果需要特定格式,则需要将其转换为字符串。

标签: c# javascript .net datetime timespan


【解决方案1】:

我相信这就是你要找的。​​p>

string.Format("{0:H:mm}",myTime)

【讨论】:

  • 如果myTimeTimeSpan,则代码会崩溃(System.FormatException:输入字符串的格式不正确。
  • @Fredrik,对不起,但是 H:mm 应该是您要寻找的转换器。
  • 我不明白你的意思。 H:mm 不是有效的 format string for a TimeSpan。对于DateTime 是的,但不是TimeSpan
  • @Fredrik,我的印象是它会解析字符串一段时间并将其转换为指定的格式。为您提供虚假信息,我深表歉意。
【解决方案2】:

您可以为此使用格式字符串:

public string GetTimeSpanAsString(TimeSpan input)
{
    return input.ToString(@"hh\:mm");
}

【讨论】:

    【解决方案3】:

    您可以截断作为 TimeSpan 核心的 'ticks' 值:

    TimeSpan t1 = TimeSpan.FromHours(1.551);
    Console.WriteLine(t1);
    TimeSpan t2 = new TimeSpan(t1.Ticks - (t1.Ticks % 600000000));
    Console.WriteLine(t2);
    

    给:

    01:33:03.6000000
    01:33:00
    

    【讨论】:

    • 谢谢,但我需要 01:33 输出
    • @Maya 我认为您将不得不修改 JSON 序列化程序或在客户端执行此操作。或者只是修改您发送到序列化程序的值并发送一个字符串。
    • 时间跨度没有格式。它只是一个整数刻度。我认为你想要的是改变它如何序列化为 json,而不是 TimeSpan 本身。
    • @Maya - TimeSpan 没有任何特定的字符串表示,直到有人将其转换为字符串 - 几乎所有 .NET 类型都这样工作。虽然您可以创建一个带有它的格式,但这不是标准类型的工作方式。
    • 很好的答案,但我会使用 TimeSpan.TicksPerMinute 而不是 600000000。
    【解决方案4】:

    也许是这样的。这使用整数除法的截断,然后乘以除数将截断为分钟。

    return TimeSpan.FromTicks(input.Ticks/TicksPerMinute*TicksPerMinute);
    

    【讨论】:

      【解决方案5】:

      也许不是最佳的,但易于阅读:

      TimeSpan.FromMinutes((long)duration.TotalMinutes);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 2017-12-11
        • 2014-07-28
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 2014-12-21
        相关资源
        最近更新 更多