24小时内显示时间跨度的标准方法是什么?

时间:2012-07-18 03:24:19

标签: c# delphi timespan

我正在寻找一种在C#和Delphi中正确显示大于24小时的本地化持续时间的方法。我的意思是,DateTime类型通常提供了这样的字符串函数,但时间跨度不是,为什么?

我甚至不知道非本地化时间跨度的正确格式是什么。 例如持续2天10小时30分钟。 我发现有些人的时间跨度为2.10:30:00或2:10:3​​0:00或2 10:30:00。

请帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

对于不变文化(非本地化):

myDateTime.ToString(CultureInfo.InvariantCulture)

否则,只需使用myDateTime.ToShortDateString()或.ToLongDateString()..它将使用:

在那种情况下

System.Threading.Thread.CurrentThread.CurrentUICulture ..

或者如果你有特定的东西,你可以做

var myCulture = CultureInfo.GetCultureInfo("en-GB");
dt.ToString(myCulture);

EDIT 对于TimeSpans:

示例:

DateTime dt1 = new DateTime(2012, 7, 17, 12, 30, 0);
            DateTime dt2 = new DateTime(2012, 7, 18, 14, 40, 0);

            TimeSpan ts = dt2 - dt1;
            string s = ts.ToString("G", CultureInfo.InvariantCulture);

此处有更多示例:http://msdn.microsoft.com/en-us/library/dd784379.aspx

编辑2:

有关TimeSpan格式字符串的更多信息: http://msdn.microsoft.com/en-us/library/ee372286.aspx

答案 1 :(得分:2)

您可以关注ISO 8601,可以找到规范的PDF here。请参阅4.4.3 Duration

部分

但是,使用本文档中列出的约定对我来说看起来相当复杂,因为根据此规范,您需要包含有关何时发生时间间隔的上下文:

  

日历年,日历月,日历周或的日期   日历日取决于其在日历中的位置。因此,   标称持续时间的确切持续时间只能在以下情况下进行评估   日历年,日历月,日历周的持续时间   使用的日历日是已知的。

如果时间跨度发生的实际时刻与您的应用程序无关,那么可能忘记年份和月份部分并且坚持使用nnDTnnHnnMnnS格式就足够了。使用标准TimeSpan方法实现这一目标并不难。

更新: 进一步阅读,这个标准似乎并不适用于你的问题:

  

持续时间用作时间间隔表示中的一个组件   和经常性的时间间隔,持续时间的表示   本国际标准没有促进。

我会在这里留下答案,以避免其他人像我一样走进这个死胡同,或者如果你认为“有点遵循标准”就足够了......