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

更改系统日期时间格式c#,c#,winforms,datetime,datetime-format,C#,Winforms,Datetime,Datetime Format,我需要以编程方式更改/更新/设置系统(windows7)的默认日期时间格式,直到我自己通过代码或windows GUI更改为止 我已经尝试了很多类似的解决方案 最接近、最著名的答案是,我尝试了这个解决方案,但没有帮助我。因为它不会更改我的系统日期时间格式(显示在任务栏中)。在我重新启动有此代码的应用程序后,在执行此代码之前,我再次获得旧格式 using System; using System.Globalization; using System.Threading; namespace t

我需要以编程方式更改/更新/设置系统(windows7)的默认日期时间格式,直到我自己通过代码或windows GUI更改为止

我已经尝试了很多类似的解决方案

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

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_当前用户→ 控制面板→ 国际
  • 双击“sShortDate”条目并将值更改为“yyyy/MM/dd”
然后我打开Windows资源管理器,所有日期都以新的格式显示,所以这绝对是注册表中的正确位置

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

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



编辑:在.NET中似乎没有直接设置语言环境设置的工具。但是,您可以使用p/Unjk通过C++ Win API来设置它,然后应该通知系统时钟(和其他应用程序)通知更改。请参阅。

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

以下是我所做的:

  • 按Win+R并键入“regedit”以获取注册表编辑器
  • 将树导航到计算机→ HKEY_当前用户→ 控制面板→ 国际
  • 双击“sShortDate”条目并将值更改为“yyyy/MM/dd”
然后我打开Windows资源管理器,所有日期都以新的格式显示,所以这绝对是注册表中的正确位置

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

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



编辑:在.NET中似乎没有直接设置语言环境设置的工具。但是,您可以使用p/Unjk通过C++ Win API来设置它,然后应该通知系统时钟(和其他应用程序)通知更改。请参阅。

看看这篇文章,谢谢@CodeIgnoto。但它设置的是
日期
,而不是
日期格式
日期时间格式
I thinktry System.ifformatprovider Interface.visit:@WajidAli Nai jani。需要SetFormat而不是GetFormat。我还期待着一些例子。因为我已经看了两个多小时了。但没有什么真正有用的:(@Sami:yar我为你的问题做了大量的研发,但没有发现任何代码片段。请看这篇文章,谢谢@CodeIgnoto。但是它设置的是
日期,而不是
日期格式
日期时间格式
我想试试System.IFormatProvider接口。访问:@WajidAli Nai jani.SetFormat是代替GetFormat。我还期待着一些示例。因为我也已经查找了很多这样的东西两个多小时了。但是没有什么真正有用的:(@Sami:yar我为你的问题做了大量的研究和开发,但没有发现任何代码片段。@Sami:i对此表示感谢,这就是为什么我在回答中继续解释你提供的代码也能工作的原因。尝试重新启动资源管理器。很抱歉,我现在在某种程度上理解了你所说的。但我需要通过c#来完成这一切。windows没有任何功能gui如果你能提供一些行来通过c#完成你的程序,我将不胜感激,这也将是对这个问题的一个完整而出色的回答:)@Sami:这些行就是你问题中的那些行(来自代码项目)。只需创建一个控制台项目,并将这些精确的行粘贴到
Main
方法中。感谢您的努力和+1。答案也是有意义的。但该代码仍然没有完成工作。在仅执行代码项目后,我仍然使用系统日期时间格式
MM/dd/yyyyy
code@Sami字体我很感激这一点,这就是我为什么要这么做的原因请继续在我的回答中解释您提供的代码也在工作。请尝试重新启动资源管理器。很抱歉,我现在已经在某种程度上理解了您所说的内容。但我需要通过c#来完成这一切。windows GUI没有任何功能。如果您能提供一些行代码,通过c#来完成您所说的过程,我将不胜感激,这将是一个完整的过程这个问题也没有答案:)@Sami:这几行就是你问题中的那几行(来自代码项目)。只需创建一个控制台项目,并将这些精确的行粘贴到
Main
方法中。感谢您的努力和+1。答案也是有意义的。但该代码仍然没有完成工作。在仅执行代码项目代码后,我仍然使用系统日期时间格式
MM/dd/yyyyy
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 + "");
        }
    }
}