【问题标题】:Change System DateTime Format c#更改系统日期时间格式 c#
【发布时间】:2012-10-18 10:04:49
【问题描述】:

我需要以编程方式永久更改/更新/设置我的系统 (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 + "");
        }
    }
}

【问题讨论】:

  • 看看这个 SO 帖子*.com/questions/650849/…
  • 感谢@CodeIgnoto。但我认为是设置Date 而不是Date FormatDateTime Format
  • 试试 System.IFormatProvider Interface.visit : www1.cs.columbia.edu/~lok/csharp/refdocs/System/types/…
  • @WajidAli Nai jani。需要 SetFormat 而不是 GetFormat。我也期待一些例子。因为我也一直在寻找很多这样的东西两个多小时。但没有什么是真正有用的:(
  • @Sami:我已经为您的问题做了很多研发,但没有找到任何代码 sn-p。

标签: c# winforms datetime datetime-format


【解决方案1】:

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

这就是我所做的:

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

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

然后我尝试了您提供的代码来修改注册表,它也正在更改资源管理器中显示的日期。

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


编辑:.NET 中似乎没有直接设置区域设置的工具。但是,您可以使用 P/Invoke 通过 C++ Win API 对其进行设置,这会导致系统时钟(和其他应用程序)收到更改通知。见this discussion

【讨论】:

  • @Sami:我很欣赏这一点,这就是为什么我在回答中继续解释您提供的代码也可以工作的原因。尝试重新启动资源管理器。
  • 对不起,我现在已经在一定程度上理解了您所说的内容。但我需要通过 c# 来完成这一切。 Windows GUI 什么都没有
  • 如果可以请提供一些行来通过 c# 执行您指定的程序。我将不胜感激,这也将是对该问题的完整而出色的答案:)
  • @Sami:这些行是您问题中的 exact 行(来自 Code Project)。只需创建一个控制台项目并将这些确切的行粘贴到 Main 方法中。
  • 感谢您的努力并 +1。答案也很有意义。但是该代码仍然无法正常工作。仅执行代码项目代码后,我的系统日期时间格式仍然为MM/dd/yyyy