我正在寻找一种在C#和Delphi中正确显示大于24小时的本地化持续时间的方法。我的意思是,DateTime类型通常提供了这样的字符串函数,但时间跨度不是,为什么?
我甚至不知道非本地化时间跨度的正确格式是什么。 例如持续2天10小时30分钟。 我发现有些人的时间跨度为2.10:30:00或2:10:30:00或2 10:30:00。
请帮助,谢谢。
答案 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
方法实现这一目标并不难。
更新: 进一步阅读,这个标准似乎并不适用于你的问题:
持续时间用作时间间隔表示中的一个组件 和经常性的时间间隔,持续时间的表示 本国际标准没有促进。
我会在这里留下答案,以避免其他人像我一样走进这个死胡同,或者如果你认为“有点遵循标准”就足够了......