日期时间格式与语言环境不符。

6
我有一个配置了默认区域设置(没有对格式或其他任何内容进行覆盖)并设置为en-US的Windows Server 2008 R2系统。
当我查询以下信息时:System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat,它将DateSeparator列为破折号(-)而不是斜杠(/)。因此,DateTime.Now.ToString()看起来像这样:01-30-2015
同时,CurrentThread.CurrentCulture.ToString() = "en-US"。
我完全不知道这是如何可能的,但更重要的是,我想知道.NET是否具有可配置的某种区域设置覆盖?
系统的区域和语言设置是正常的,没有更改。非常感谢您的帮助。
以下是诊断信息的代码。它在aspx页面上运行,用于ASP.NET。
Current Date Time: <%= DateTime.Now.ToString() %>
Current Short Date: <%= DateTime.Now.ToShortDateString() %>
Current Culture: <%= System.Threading.Thread.CurrentThread.CurrentCulture.ToString() %>
Current UI Culture: <%= System.Threading.Thread.CurrentUICulture.ToString() %>

DateTimeFormatInfo invariant = CultureInfo.InvariantCulture.DateTimeForamat;
DateTimeFormatInfo uiThread = System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat;
DateTimeFormatInfo thread = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat;

Type type = System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.GetType();
foreach( var prop in type.GetProperties()) {
  <%= prop.Name %> 
  <%= prop.GetValue(invariant, null) %> <br/>
  <%= prop.GetValue(uiThread, null) %> <br/>
  <%= prop.GetValue(thread, null) %> <br/>
}

地区和语言设置 地区和语言设置

以下是一些额外信息 关于 DateTimeFormat 的诊断信息


7
那么你可以在一个小的控制台应用程序中看到这个吗?一个演示会非常方便,以确保我们都在考虑同样的事情。 - Jon Skeet
2
请提供您的图像示例代码。您的区域和语言设置看起来像默认设置(短日期格式为M/d/yyyy)? - Erik Philips
1
这不是 en-US 机器上的默认设置。 - Hans Passant
2
请检查用于运行您的ASP.NET应用程序的应用程序池所使用的帐户的区域设置。它们可能与您在“区域和语言设置”对话框中查看的设置不同。 - Joe
1
当您尝试使用System.Globalization.CultureInfo.GetCultureInfo("en-US")静态获取它们(即不从系统设置中获取)时会发生什么? - Steven Evers
显示剩余5条评论
1个回答

2
每个用户都有不同的地区配置文件。您当前的帐户和应用程序可能没有使用相同的帐户,这就是为什么您看到不同的值。
转到区域设置窗口 -> 管理 -> 单击复制设置并选中所有复选框(欢迎屏幕和系统帐户+新用户帐户),然后单击确定。看看是否解决了您的问题。如果您的应用程序是Web应用程序,则需要创建另一个AppPool才能看到其影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接