设置默认日期时间格式c#

Mat*_*ood 35 c# format asp.net-mvc datetime

有没有办法为整个应用程序设置或覆盖默认的DateTime格式.我正在用C#.Net MVC 1.0编写一个应用程序,并使用很多泛型和反射.如果我可以将默认的DateTime.ToString()格式覆盖为"dd-MMM-yyyy",那会简单得多.当站点在不同的计算机上运行时,我不希望更改此格式.

编辑 - 只是为了澄清我的意思是专门调用ToString,而不是其他一些扩展函数,这是因为反射/生成代码.更改ToString输出会更容易.

Pao*_*sco 51

日期时间的"默认格式"是:

ShortDatePattern + ' ' + LongTimePattern
Run Code Online (Sandbox Code Playgroud)

至少在当前的单声道实现中.如果您想要显示类似2001-02-03T04:05:06Z的内容,即ISO 8606中指定的日期和时间组合,这会特别痛苦,但在您的情况下不是一个大问题:

using System;
using System.Globalization;
using System.Threading;

namespace test {
    public static class Program {
        public static void Main() {
            CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
            culture.DateTimeFormat.LongTimePattern = "";
            Thread.CurrentThread.CurrentCulture = culture;
            Console.WriteLine(DateTime.Now);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在日期时间设置ToString的默认行为,以返回您期望的格式.

  • 如果我输入 <% CultureInfoculture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; 文化.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = 文化;%> 在视图顶部,它正确格式化了页面上的所有日期时间。但是,当我将该代码放入 global.asax 的 Application_Start 中时,它不起作用。我认为这与 IIS 中请求的多线程有关。放置此代码以影响我的整个网站的最佳位置在哪里。 (2认同)
  • 我会尝试Application_BeginRequest,但我想你最好问一个新问题...... (2认同)

Seb*_*son 8

它取决于您的应用程序的本地化设置.相应改变以获得正确的格式.

否则有一个辅助类或扩展方法,它总是处理你的DateTime.

public static string ToMyDateTime(this DateTime dateTime) {
    return dateTime.ToString("dd-MMMM-yy");
}
Run Code Online (Sandbox Code Playgroud)