更改系统日期时间格式c#

我需要以编程方式永久地更改/更新/设置我的系统(windows7)默认日期时间格式,直到我通过代码或通过Windows GUI更改它

我已尝试过很多来自Code Project的解决方案

Console.Write(DateTime.Now + ""); RegistryKey rkey = Registry.CurrentUser.OpenSubKey(@" Control Panel\International", true); rkey.SetValue("sShortDate", "dd/MM/yyyy"); rkey.SetValue("sLongDate", "dd/MM/yyyy"); Console.Write(DateTime.Now + ""); 

最接近且得名的答案是来自Set Default DateTime Format c# ,我试过这个解决方案,但它没有帮助我。 因为它不会更改我的系统日期时间格式(显示在任务栏中)。 在我重新启动具有此代码的应用程序后,在执行此代码之前,我再次获取旧格式。

 using System; using System.Globalization; using System.Threading; namespace test { public static class Program { public static void Main() { Console.Write(DateTime.Now + "");// MessageBox.Show(DateTime.Now + ""); CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; culture.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = culture; Console.Write(DateTime.Now + "");// MessageBox.Show(DateTime.Now + ""); } } } 

我尝试手动更改问题中提到的注册表项。

这是我做的:

  • 按下Win + R并键入“regedit”以获取注册表编辑器。
  • 将树导航到计算机→HKEY_CURRENT_USER→控制面板→国际。
  • 双击’sShortDate’条目并将值更改为’yyyy / MM / dd’。

然后我打开了Windows资源管理器,所有日期都以新格式显示,所以这绝对是注册表中的正确位置。

然后我尝试了您提供的代码来修改注册表,它也改变了Explorer中显示的日期。

因此,这让我相信Windows任务栏时钟不会对此设置的更改做出反应。 我通过从任务管理器中杀死并重新启动’explorer.exe’来确认这一点。 如果重新启动资源管理器,您也应该看到更改生效。


编辑:.NET中似乎没有用于直接设置区域设置的工具。 但是,您可以使用P / Invoke通过C ++ Win API进行设置,然后应该使系统时钟(和其他应用程序)得到更改通知。 看到这个讨论 。

我测试过你的两个代码都没问题,只需要重新启动explorer.exe即可查看系统托盘中日期时间格式的更改