【问题标题】:How do I convert an integer into an ISO8601 TimeSpan?如何将整数转换为 ISO8601 TimeSpan?
【发布时间】:2012-09-24 19:27:16
【问题描述】:

这是我的输入:

55

这是我想要的输出:

PT55H

C# 中是否有一个内置类可以将时间跨度转换为:TimeSpan.TryParse(55) 或带有小时的字符串“55”转换为 ISO8601 格式的字符串?

【问题讨论】:

标签: c# parsing datetime


【解决方案1】:

您可以使用静态TimeSpan.FromHours 方法将数字转换为TimeSpan。例如var ts = TimeSpan.FromHours(55.0);。

如果你总是希望时间只用小时表示,在 ISO 系统中,也许你可以简单地说var isostring = String.Format("PT{0}H", ts.TotalHours);。

【讨论】:

  • 这可行,但我想要任何时间跨度的通用内容
  • 但它对任何时间跨度都不起作用吗?我以为你想要一个只有小时的格式。比如PT55H(55 小时)而不是P2DT7H(2 天零 7 小时)。
  • 理想情况下,我希望只有几个小时,但由于我要求通用,似乎我别无选择,只能自己处理字符串,或者允许它使用 P2DT7H 格式。 '
  • 对于任何TimeSpan ts(不应为负数),我的String.Format("PT{0}H", ts.TotalHours) 给出一个PT,后跟几个小时(可能带有小数),然后是一个H。您可以指定小数位数,或小数分隔符(如果需要)。
【解决方案2】:

同事刚刚为我找到了这个:

TimeSpan start = new TimeSpan(int.Parse(txtStartHours.Text), 0, 0); 
durationNode.Element("StartTime").Value = XmlConvert.ToString(start); 

好像是转换成PT2D7H,不过我在别处用的是XMLConvert.ToTimeSpan().TotalHours,应该不会有什么问题吧!

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 2015-11-13
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多