【问题标题】:Override DateTime.ToString to use "o" instead of "G"覆盖 DateTime.ToString 以使用“o”而不是“G”
【发布时间】:2023-03-17 19:22:01
【问题描述】:

.Net 中有什么方法可以让 DateTime.ToString() 使用的默认格式从 ToString("G") 更改为 ToString("o")?

我没有选择使用不同的重载,它必须是 ToString()。

更新: 我找到了一种使用 DateTimeOffset 做我需要的方法,但看到 Gonzalo 的解决方案非常有用。

【问题讨论】:

  • 如果你不介意我问,你为什么要使用 ToString?
  • 因为它是 Linq-to-SQL 在后台使用的,我想让它在数据库中存储时区(我在使用 DateTimeOffset 时遇到文化问题)。

标签: .net datetime


【解决方案1】:

这是我能得到的最接近的。唯一的问题是日期和T之间有一个空格:

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

class Test {
    static void Main ()
    {
        Console.WriteLine (DateTime.Now.ToString ("o"));
        CultureInfo culture = (CultureInfo) CultureInfo.CurrentCulture.Clone();
        culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
        culture.DateTimeFormat.LongTimePattern = "THH:mm:ss.fffffffzzz";
        Thread.CurrentThread.CurrentCulture = culture;
        Console.WriteLine (DateTime.Now);
    }
}

输出是:

2009-11-23T00:32:53.5291030-05:00
2009-11-23 T00:32:53.6493060-05:00

【讨论】:

  • 我简要地查看了该选项,但不够聪明,无法解决:)。我不想在我的应用程序的每个线程上都这样做......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多