2

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

而且我什至不知道非本地化时间跨度的正确格式是什么。例如,持续 2 天 10 小时 30 分钟。我发现有些会显示时间跨度为 2.10:30:00 或 2:10:30:00 或 2 10:30:00。

请帮忙,谢谢。

4

2 回答 2

2

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

myDateTime.ToString(CultureInfo.InvariantCulture)

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

System.Threading.Thread.CurrentThread.CurrentUICulture在这种情况下..

或者如果您有特定的想法,您可以这样做

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

编辑时间跨度:

例子:

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

于 2012-07-18T03:45:50.690 回答
2

您可以遵循ISO 8601,可以在此处找到规范的 PDF 。见部分4.4.3 Duration

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

日历年、日历月、日历周或日历日的持续时间取决于其在日历中的位置。因此,只有知道所使用的日历年、日历月、日历周或日历日的持续时间,才能评估名义持续时间的确切持续时间。

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

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

持续时间用作时间间隔和重复时间间隔表示中的一个组成部分,本国际标准不促进持续时间的表示。

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

于 2012-07-18T03:45:54.220 回答