我使用VB6 / COM +应用程序,根据控制面板中的短日期设置,区域设置,为运行它的用户输出日期/时间值。然后解析该输出的程序具有其期望的日期格式的可配置设置,并在UI中显示。
e.g。如果用户的区域设置设置为mm / dd / yyyy,并且输出06/18/2009,则期望“18/06/2009”的应用程序将失败,并且“字符串未被识别为有效的DateTime”。
由于我们通常将此应用程序作为服务帐户运行,我们尚未以交互方式登录以创建配置文件,因此我们通常会设置正确的日期格式,然后勾选“将所有设置应用于当前用户帐户和默认设置用户个人资料“选项。
我想制作我为此混乱编写的C#配置实用程序,以便能够以编程方式为给定用户设置日期格式。
修改 我只想改变代码,但目前没有能力这样做。
我也知道我所要求的是一件坏事。关于“它应该是用户的选择” - 我我该用户,因为我明确地为该任务创建它;我只想用脚本方法设置日期格式,而不是自己点击。
答案 0 :(得分:16)
微软特别不鼓励这样做。你可能提出的任何解决方案都将是一个肮脏的黑客,可能很快就会停止工作。
这样想:你是谁来决定那些设置?您认为这不是用户的决定吗?
回到主题:找到要进行通信的应用程序的明确格式,例如YYYYMMDD
。然后,显示的应用程序可以简单地尊重实际的用户设置。
但是,既然你无法改变它,只需进入注册表:
当前用户:
HKEY_CURRENT_USER\Control Panel\International
特定用户:
HKEY_USERS\(user SID)\Control Panel\International
默认用户:
HKEY_USERS\.DEFAULT\Control Panel\International
sShortDate
可能是您想要更改的值。
答案 1 :(得分:2)
如果您要修改配置文件以满足您的需求,为什么不忽略配置文件设置并在您的应用中对您想要的格式进行硬编码?
答案 2 :(得分: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")
答案 3 :(得分:0)
虽然要谨慎地持续改变用户的文化(区域设置),但仍有合法的用例。
在Windows 8和Windows Server 2012及更高版本上,Windows PowerShell附带了
Set-Culture
cmdlet,这是通过控制面板(intl.cpl
)选择不同区域的程序化等效项。
例如,Set-Culture fr-CA
相当于为当前用户以交互方式选择区域French (Canada)
。
警告:混合文化(例如en-DE
(原文如此)似乎从Windows PowerShell v5.1开始不起作用 - 请参阅我的this answer。
虽然它不会很快,但可以从C#调用PowerShell命令。