C# .net区域性特定的12/24小时格式

C# .net区域性特定的12/24小时格式,c#,wpf,datetime,cultureinfo,C#,Wpf,Datetime,Cultureinfo,有没有办法保持区域性特定的日期时间格式,但强制12/24小时渲染?我知道我可以对实际的日期/时间格式字符串做很多事情,比如HH:mm:ss和HH:mm:ss,但我想尊重当前的用户区域性格式(即mm/dd/yyyyy或yyyyy/mm/dd等),只要强制12/24小时时间渲染即可。这取决于您所谈论的区域性。有些文化不接受24小时制,有些文化不接受上午/下午。最安全的选择可能是InvariantCulture用于确保获得适合您的区域性的版本。注意:默认情况下,它使用线程的当前区域性设置 样本(来自)

有没有办法保持区域性特定的日期时间格式,但强制12/24小时渲染?我知道我可以对实际的日期/时间格式字符串做很多事情,比如
HH:mm:ss
HH:mm:ss
,但我想尊重当前的用户区域性格式(即
mm/dd/yyyyy
yyyyy/mm/dd
等),只要强制12/24小时时间渲染即可。

这取决于您所谈论的区域性。有些文化不接受24小时制,有些文化不接受上午/下午。最安全的选择可能是
InvariantCulture

用于确保获得适合您的区域性的版本。注意:默认情况下,它使用线程的当前区域性设置

样本(来自):

您可以使用-例如:

对于12小时渲染:

DateTime.Now.ToString("hh:mm:ss tt");
DateTime.Now.ToString("HH:mm:ss");
对于24小时渲染:

DateTime.Now.ToString("hh:mm:ss tt");
DateTime.Now.ToString("HH:mm:ss");
要与当前区域性中的日期格式组合,可以使用以下其中一种:

DateTime.Now.ToString("d") + DateTime.Now.ToString(" hh:mm:ss tt");
DateTime.Now.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + 
                                      " hh:mm:ss tt");

我可能会这样做:

        var culture = CultureInfo.CurrentCulture;
        var pattern = culture.DateTimeFormat.LongTimePattern; // or pick which one you want to use;
        var newPattern = pattern.Replace("h", "H").Replace("t", "");
        DateTime.Now.ToString(newPattern); // or use whatever DateTime you want to use
从聊天室:

以下是所有区域性的长时间模式字符串的列表,以及如何修改它们:

Old: hh:mm:ss tt New: HH:mm:ss 
Old: HH:mm:ss 'ч.' New: HH:mm:ss 'ч.'
Old: HH:mm:ss New: HH:mm:ss
Old: H:mm:ss New: H:mm:ss
Old: h:mm:ss tt New: H:mm:ss 
Old: tt h:mm:ss New:  H:mm:ss
Old: h:mm:ss.tt New: H:mm:ss.
Old: HH.mm.ss New: HH.mm.ss
Old: tt hh:mm:ss New:  HH:mm:ss

他明确表示,除了24小时字符串外,他想观察当前的文化。他说他想强制12/24小时渲染,但尊重文化。。。不知道你的意思。我理解的方式是,他想使用一种文化固有的日期格式,但时间格式是
hh
hh
格式,这可能有效,也可能无效,取决于文化。他说他想保持当前文化的一切不变(斜杠,月/日/年的顺序),但强制24小时渲染。与中一样,他只想违反当前文化的一条规则(12/24小时)。否则一切保持不变。请看我的答案以理解我认为他的意思。他明确表示他想稍微改变当前的文化。@McKay在我听来,他只是想根据用户的文化在12/24中呈现,但是MSDN代码段和您的答案显示了如何获取用于操作的基本模式。那么:DateTime.ToShortTimeString()如何“根据用户的区域性在12/24内呈现”@McKay他会在调用方法之前将线程的区域性调整为用户的区域性。。。我不确定我是否理解你的问题。确切地说,我认为这是他的问题?他明确表示,他主要希望保持当前的文化。+1:这可能行得通。我很好奇在某些文化中,它对操纵时间格式有何反应。我现在正在做一些测试——但我想这就是我想要的。如果这行得通,我很快就会接受答案。谢谢…McKay,这看起来对我有用。我很感激有时间阅读我所写的内容并真正思考解决方案。替换也是一个简单的方法。我会将此标记为答案。不要忘记在替换后添加一个
Trim()
,以避免删除“tt”后留下的前导和尾随空格。