gpt4 book ai didi

c# - 服务器在区域设置中设置为 en-GB,但 DateTime 解析为 en-US

转载 作者:太空狗 更新时间:2023-10-30 00:55:52 25 4
gpt4 key购买 nike

我通过将每条记录推送到验证阶段,然后将其放入数据库来处理记录。验证步骤之一需要检查某些列是否为日期。我使用 DateTime.TryParse(s, out DateTime) 执行此操作,假设这将使用运行进程的机器上配置的区域设置。在我的本地机器上,这是一个在 Visual Studio 的命令行工具中运行的包装类(为了便于调试)。因此,根据我的 Windows 7 开发机器上的 en-GB 设置,13/01/2010 被格式化为 2010 年 1 月 13 日。

将其推送到我们的测试服务器(Windows Server 2008 R2)后,此包装器类在窗口服务(在 LocalSystem 帐户下)内运行。完全相同的代码,我将其设计为服务只是一个薄包装。但是,经过多次调试后,服务器似乎将 13/01/2010 解析为 en-US,因此失败了。尽管区域设置被设置为 en-GB。 (见截图)

Regional Settings on server

请注意,这是到达 SQL Server 之前的方式,因此这不是此问题的一部分。

在解决这个问题之后,我通过使用下面的代码并将所需的格式设置为 en-GB 来强制这种情况。

Culture = CultureInfo.CreateSpecificCulture("en-GB");
DateTimeStyles dateTimeStyles = DateTimeStyles.None;
DateTime dt;
bool pass = DateTime.TryParse(s,Culture,dateTimeStyles, out dt);

现在可以了。我的问题是,在本地系统下运行的 Windows 服务为何假定 en-US 而不是 en-GB?

最佳答案

描述

您可以使用 Thread.CurrentThread.CurrentCulture 将当前线程的文化设置为此。这将对当前线程中所有特定于文化的事物产生影响。

示例

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB");

更多信息

更新

当服务使用 SYSTEM 帐户运行时,与您的帐户配置文件关联的区域设置似乎无关紧要。 Windows 服务的默认文化是 en-US。网上有很多讨论。都以“设置当前线程的文化”结尾,就像我的回答一样。

关于c# - 服务器在区域设置中设置为 en-GB,但 DateTime 解析为 en-US,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com