5

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

例如,如果用户的区域设置设置为 mm/dd/yyyy,并且它输出 06/18/2009,则预期“18/06/2009”的应用程序将失败,并显示“字符串未被识别为有效的日期时间”。

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

我想制作我为这个混乱编写的 C# 配置实用程序,以便能够以编程方式为给定用户设置日期格式。

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

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

4

4 回答 4

17

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

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

回到主题:找到一种明确的格式供应用程序进行通信,例如YYYYMMDD. 然后,显示的应用程序可以简单地尊重实际的用户设置,因为它应该这样做。

但是,由于您无法更改它,只需戳入注册表:

当前用户:

HKEY_CURRENT_USER\Control Panel\International

具体用户:

HKEY_USERS\(user SID)\Control Panel\International

默认用户:

HKEY_USERS\.DEFAULT\Control Panel\International

sShortDate可能是您要更改的值。

于 2009-06-18T18:03:13.337 回答
2

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

于 2009-06-18T17:56:59.087 回答
1

代码:

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")
于 2016-12-13T18:50:15.767 回答
0

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

在 Windows 8 和 Windows Server 2012 及更高版本上,Windows PowerShell 附带
Set-Culturecmdletintl.cpl ,它与通过控制面板 ( )选择不同区域的程序等效。

例如,Set-Culture fr-CA相当于French (Canada)为当前用户交互式地选择区域。

警告:(原文如此)等混合文化en-DE从 Windows PowerShell v5.1 开始似乎不起作用 - 请参阅我的这个答案

虽然它不会很快,但可以从 C# 调用 PowerShell 命令。

于 2018-04-17T21:47:00.350 回答