.net Date.ToSortDateFormat()有时使用了错误的区域设置?

.net Date.ToSortDateFormat()有时使用了错误的区域设置?,.net,visual-studio-2010,localization,string-formatting,.net,Visual Studio 2010,Localization,String Formatting,我将我的VS2008项目转换为VS2010,但将其保留在.NET3.5框架中。我没有在应用程序中的任何位置设置语言环境 我在运行Windows7和XP的计算机上安装了两个,并且都将区域设置为EN-AU 有时我的应用程序会返回短日期格式,如MM/dd/YY(EN-US)。一旦您退出并重新启动,它将恢复为AU的正确格式(dd/mm/yy)。同样,我不会在项目中的任何地方设置语言环境。(我有一些RDLC报告,其语言为EN-US) 为什么会发生这种情况?我还尝试显式地设置线程区域设置。但同样的行为。Da

我将我的VS2008项目转换为VS2010,但将其保留在.NET3.5框架中。我没有在应用程序中的任何位置设置语言环境

我在运行Windows7和XP的计算机上安装了两个,并且都将区域设置为EN-AU

有时我的应用程序会返回短日期格式,如MM/dd/YY(EN-US)。一旦您退出并重新启动,它将恢复为AU的正确格式(dd/mm/yy)。同样,我不会在项目中的任何地方设置语言环境。(我有一些RDLC报告,其语言为EN-US)


为什么会发生这种情况?我还尝试显式地设置线程区域设置。但同样的行为。

Datetime.UTC基于本地系统时间以及本地系统是否遵守夏令时

无论您是否设置了位置。日期时间选择器应根据UTC和您的系统自动设置自身

查看此链接,它为datetime提供了一些有用的提示


Datetime.UTC基于本地系统时间以及本地系统是否遵守夏令时

无论您是否设置了位置。日期时间选择器应根据UTC和您的系统自动设置自身

查看此链接,它为datetime提供了一些有用的提示

这很奇怪。 我建议您不要使用ToSortDate(),因为我从中看到了一些问题。相反,我建议使用以下代码:

字符串formattedDate=someDateTime.ToString(“d”,CultureInfo.CurrentCulture)

这基本上是一样的。您可以引入常量而不是“d”,以提高可读性(它是短日期格式字符串)

传递IFormatProvider始终是一个很好的做法,因为它可以作为一个注释,清楚地记录您的假设(在上面的示例中,我说:这是我要呈现给用户的日期字符串;如果我想使用此日期进行进一步处理,请通过网络等发送。我会使用CultureInfo.InvariantCulture)。

这很奇怪。 我建议您不要使用ToSortDate(),因为我从中看到了一些问题。相反,我建议使用以下代码:

字符串formattedDate=someDateTime.ToString(“d”,CultureInfo.CurrentCulture)

这基本上是一样的。您可以引入常量而不是“d”,以提高可读性(它是短日期格式字符串)


传递IFormatProvider始终是一种很好的做法,因为它可以作为一条注释,清楚地记录您的假设(在上面的示例中,我说:这是我要呈现给用户的日期字符串;如果我想使用此日期进行进一步处理,请通过网络等发送。我将使用CultureInfo.InvariantCulture).

您确定线程的当前区域性没有被第三方库或其他东西弄乱吗?可能会尝试记录此设置,并在发生时格式化时间。。。您可以使用我在下面提供的代码显式地格式化AU区域性(只需更改区域性),但我不推荐这样做。问题似乎是我使用的报表查看器控件。您确定线程的当前区域性没有被第三方库或其他东西弄乱吗?可能会尝试记录此设置,并在发生时格式化时间。。。您可以使用我在下面提供的代码显式地格式化AU区域性(只需更改区域性),但我不推荐这样做。问题似乎是我使用的报表查看器控件。我使用datagridview并将列格式设置为“d”,结果也是一样的。它有时使用AUS格式,有时使用US格式。我观察了当前的文化,甚至尝试了显式设置。除了查看RDLC/报告时,任何给定线程的区域性始终为en-au。您提到的ToSortDate()的问题是什么?ToSortDate()的问题实际上并不适用于您的问题。问题是,我们需要将短日期字符串传递给一些第三方代码,这些代码希望它采用不变量文化格式。由于没有采用IFormatProvider的ToSortDate()重载版本,因此我们在某些地区遇到了严重的异常。从我对DateTime To(…)String()方法实现的了解来看,我非常确定某种东西(可能是RDLC/Reports?)正在改变线程的当前区域性。除移除有缺陷的部件外,此类问题没有明显的解决方案。当然,您可以尝试总是根据所需的区域性设置日期格式,这是绝对不会失败的,但这似乎会有很大的问题(特别是如果您必须对DataGridView的数据执行此操作的话)。我使用DataGridView,并将列格式设置为“d”,结果也是一样的。它有时使用AUS格式,有时使用US格式。我观察了当前的文化,甚至尝试了显式设置。除了查看RDLC/报告时,任何给定线程的区域性始终为en-au。您提到的ToSortDate()的问题是什么?ToSortDate()的问题实际上并不适用于您的问题。问题是,我们需要将短日期字符串传递给一些第三方代码,这些代码希望它采用不变量文化格式。由于没有采用IFormatProvider的ToSortDate()重载版本,因此我们在某些地区遇到了严重的异常。从我对DateTime To(…)String()方法实现的了解来看,我非常确定某种东西(可能是RDLC/Reports?)正在改变线程的当前区域性。除移除有缺陷的部件外,此类问题没有明显的解决方案。当然,您可以尝试总是根据您想要的文化设置日期格式,这是绝对不会失败的,但这似乎会有很大的问题(特别是如果您必须对DataGridView的数据这样做的话)。但它有时不应该使用AUS格式,而另一种格式应该使用US格式。我同意,它应该始终使用您的系统默认设置。但它不应该有时使用AUS格式,有时使用US格式。我同意,它应该始终使用您的sys