如何以文化感知方式格式化 TimeSpan 的 HH:mm:ss 分隔符?

2023-11-21

我正在开发一款可以在世界许多国家/地区看到的应用程序。没有多少国家/地区会使用 : 以外的其他内容作为分隔符来显示小时、分钟和秒,但有一些国家/地区,我想确保其所在地区的时间格式正确。 DateTime 在这方面很擅长,但 TimeSpan 则不然。这些片段来自我使用 .Net 4 的 Visual Studio 2010 中的直接窗口,并将我的区域设置为马拉雅拉姆语(印度)。 dateTime.Now 调用还反映了时间在我的时钟、Microsoft Outlook 和其他区域上的显示方式。

DateTime.Now.ToString()
"02-10-12 17.00.58"

http://msdn.microsoft.com/en-us/library/dd784379.aspx表示“如果 formatProvider 为 null,则使用与当前区域性关联的 DateTimeFormatInfo 对象。如果 format 是自定义格式字符串,则忽略 formatProvider 参数。”按理说,我什至不需要传递当前的 CultureInfo。我想要的格式是 hh.mm.ss,但在大多数其他语言中显然是 hh:mm:ss,如果有任何其他可能性,它也应该自动反映这些 - 基本上 TimeSpan 应该是文化感知,就像 DateTime 一样。

However:

timeRemaining.ToString()
"00:02:09"
timeRemaining.ToString("c")
"00:02:09"
timeRemaining.ToString("c", CultureInfo.CurrentCulture)
"00:02:09"
timeRemaining.ToString("g")
"0:02:09"
timeRemaining.ToString("G")
"0:00:02:09.0000000"
timeRemaining.ToString("t")
"00:02:09"
timeRemaining.ToString("g", CultureInfo.CurrentCulture)
"0:02:09"
timeRemaining.ToString("g", CultureInfo.CurrentUICulture)
"0:02:09"
timeRemaining.ToString("G", CultureInfo.CurrentUICulture)
"0:00:02:09.0000000"
timeRemaining.ToString("G", CultureInfo.CurrentCulture)
"0:00:02:09.0000000"
timeRemaining.ToString("t", CultureInfo.CurrentCulture)
"00:02:09"

我正在寻找一个简单的单行以文化感知的方式输出时间跨度。任何想法表示赞赏。


看起来像是一个错误,您可以在 connect.microsoft.com 上报告它。同时,解决方法是利用日期时间格式。像这样:

using System;
using System.Globalization;

class Program {
    static void Main(string[] args) {
        var ci = CultureInfo.GetCultureInfo("ml-IN");
        System.Threading.Thread.CurrentThread.CurrentCulture = ci;
        var ts = new TimeSpan(0, 2, 9);
        var dt = new DateTime(Math.Abs(ts.Ticks));
        Console.WriteLine(dt.ToString("HH:mm:ss"));
        Console.ReadLine();
    }
}

Output:

00.02.09

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以文化感知方式格式化 TimeSpan 的 HH:mm:ss 分隔符? 的相关文章

随机推荐