C# 如何更改Windows用户';s区域设置/日期格式?

C# 如何更改Windows用户';s区域设置/日期格式?,c#,windows,datetime,registry,regional,C#,Windows,Datetime,Registry,Regional,我使用VB6/COM+应用程序,该应用程序根据运行它的用户在控制面板“区域设置”中的短日期设置输出日期/时间值。然后解析该输出的程序具有可配置的日期格式设置,并显示在UI中 e、 g.如果用户的区域设置设置为mm/dd/yyyy,并输出2009年6月18日,则预期为“2009年6月18日”的应用程序将失败,并显示“字符串未被识别为有效的日期时间” 由于我们通常将此应用程序作为服务帐户运行,而我们没有以交互方式登录以创建配置文件,因此我们通常会设置正确的日期格式,然后勾选“将所有设置应用于当前用户

我使用VB6/COM+应用程序,该应用程序根据运行它的用户在控制面板“区域设置”中的短日期设置输出日期/时间值。然后解析该输出的程序具有可配置的日期格式设置,并显示在UI中

e、 g.如果用户的区域设置设置为mm/dd/yyyy,并输出2009年6月18日,则预期为“2009年6月18日”的应用程序将失败,并显示“字符串未被识别为有效的日期时间”

由于我们通常将此应用程序作为服务帐户运行,而我们没有以交互方式登录以创建配置文件,因此我们通常会设置正确的日期格式,然后勾选“将所有设置应用于当前用户帐户和默认用户配置文件”选项

我想让我为这个mess编写的C#配置实用程序能够以编程方式为给定用户设置日期格式

编辑 我只想更改代码,但目前没有能力这样做


我也知道我所要求的是一件坏事。关于“它应该是用户的选择”——我am该用户,因为我明确地为任务创建它;我只想通过脚本方法设置日期格式,而不必自己点击。

如果您要修改配置文件以满足您的需要,为什么不忽略配置文件设置并在应用程序中硬编码所需的格式?

Microsoft特别不鼓励这样做。你可能想出的任何解决方案都将是一个肮脏的黑客,很快就会停止工作

这样想:你是谁来决定这些设置?你不认为这是用户的决定吗

回到主题:找到应用程序通信的明确格式,例如
YYYYMMDD
。然后,显示的应用程序可以简单地遵守实际的用户设置,这是它应该做到的

但是,既然您无法更改它,只需进入注册表:

当前用户:

HKEY_CURRENT_USER\Control Panel\International
特定用户:

HKEY_USERS\(user SID)\Control Panel\International
默认用户:

HKEY_USERS\.DEFAULT\Control Panel\International
sShortDate
可能是您要更改的值

代码:

Imports System.Threading
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US", False)
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", "sShortDate", "M/d/yyyy")

虽然要谨慎地持续更改用户的文化(区域设置),但也存在合法的用例

在Windows 8和Windows Server 2012及更高版本上,Windows PowerShell附带了
,这相当于通过控制面板(
intl.cpl
)选择不同的区域

例如,
Set Culture fr CA
相当于为当前用户交互选择region
French(Canada)

警告:从Windows PowerShell v5.1开始,混合区域性(如
en DE
(原文如此))似乎不起作用-请参阅我的


虽然速度不快,但可以从C#调用PowerShell命令。

我知道这样做是不好的。我就是那个用户,我显式地为任务创建它;我只想通过脚本方法设置日期格式,而不必自己单击。我只想更改代码,但没有能力这样做。谢谢-我很有信心你的答案会奏效,但不管怎样,你对这个问题的务实态度绝对值得代表。