繁体   English   中英

DateTimePicker的确切日期和时间格式

[英]Exact date and time format of DateTimePicker

根据这篇文章,我知道,DateTimePicker控件并不反映CurrentUICulture
那么,我怎样才能获得它所使用的真实文化? 我需要在多语言应用程序中获取DateTimePicker的字符串值,但与用户在表单上看到的格式完全相同 (不,我不能设置“硬编码”自定义格式)。

例:
当我使用我的原生波兰语设置在Windows上工作时,对于LongTime,它是: HH:mm:在DateTimePicker中的ss和时间显示如下: 092650

现在,当我想在我的应用程序中选择不同的语言并在表单的构造函数中将文化设置更改为US时:

...
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

InitializeComponent();
....

然后

MessageBox.Show(System.Globalization.DateTimeFormatInfo.CurrentInfo.LongTimePattern);

显示,新的时间格式是: h:mm:ss tt ,但DateTimePicker仍在显示: 092650

当我尝试获取时间字符串时:

dateTimePicker1.Value.ToLongTimeString()

要么

dateTimePicker1.Value.ToString(System.Globalization.DateTimeFormatInfo.CurrentInfo.LongTimePattern)

然后时间显示如下: 上午9:26:50

所以我的问题是 - 我怎么能知道,DateTimePicker仍在使用系统的CultureInfo(“pl-PL”),或者它的显示格式是:HH:mm:ss?

DateTimePicker是本机Windows控件。 它使用控制面板+区域和语言小程序中配置的时间格式。 在我的机器上看起来像这样(我住在美国):

在此输入图像描述

因此,您可以通过在更改之前存储Thread.CurrentCulture值来找到它使用的格式。

请注意,改变UI线程的文化是一件非常危险的事情。 问题是程序中的任何其他线程,特别是小线程池和I / O完成线程,仍然使用机器的默认文化运行,如上面屏幕截图中的“管理”选项卡中所配置的那样。 这可能会导致难以发现的细微错误。 就像在UI线程上创建的SortedList一样,突然在工作线程中不再排序。 .NET 4.5将通过添加的CultureInfo.DefaultThreadCurrentCulture和DefaultThreadCurrentUICulture属性为此问题提供修复。

请放心,您的程序的少数用户实际上希望使用与其机器设置和母语不匹配的语言来运行它。 在UI中提供语言更改选项是一个演示功能,它实际上并没有被使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM