C# DateTimePicker的确切日期和时间格式

C# DateTimePicker的确切日期和时间格式,c#,format,globalization,datetimepicker,C#,Format,Globalization,Datetimepicker,据我所知,DateTimePicker控件不反映当前UICulture 那么,我怎样才能得到它所使用的真正的文化?我需要它来获取多语言应用程序中DateTimePicker的字符串值,但格式与用户在表单上看到的格式完全相同(不,我不能设置“硬编码”自定义格式) 示例: 当我在使用本机波兰语设置的Windows上工作时,长期显示为:HH:mm:ss,日期时间选择器中的时间显示为:09:26:50 现在,当我想在我的应用程序中选择不同的语言并在窗体的构造函数中将区域性设置更改为US时: ... Sy

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

示例:
当我在使用本机波兰语设置的Windows上工作时,长期显示为:HH:mm:ss,日期时间选择器中的时间显示为:09:26:50

现在,当我想在我的应用程序中选择不同的语言并在窗体的构造函数中将区域性设置更改为US时:

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

InitializeComponent();
....
然后

显示新的时间格式为:h:mm:ss tt,但DateTimePicker仍然显示:09:26:50

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

dateTimePicker1.Value.ToLongTimeString()

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


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

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

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

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


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

尝试将设置区域性的代码移动到InitializeCulture()。你在上班前检查过你的文化吗?这是开始时的事。。。但是,我需要在.dll中的一个类中使用它,该类将附加到其他项目,因此我恐怕无法访问语言更改的位置。除非我强制它的用户向类提供“默认”区域性-这是某种解决方案。如果我能以某种方式“绕过”.NET文化,进入控制面板中设置的文化,那就最好了……好吧,你们可以利用我警告过你们的那个大问题。启动一个小助手线程,它的区域性将是系统默认值。这是一个很好的建议。但是如果您启动了一个助手线程,您确定它不会继承创建它的线程的区域性吗?还有一个pinvoke(顺便说一句,在Vista/W2K8上还有GetSystemDefaultLocaleName)看起来比多线程方法简单,依我的拙见。@Clafou-不,如果那样行的话,我就不会警告这个大问题了。区域性不在Thread.ExecutionContext中流动
dateTimePicker1.Value.ToLongTimeString()
dateTimePicker1.Value.ToString(System.Globalization.DateTimeFormatInfo.CurrentInfo.LongTimePattern)