代码之家  ›  专栏  ›  技术社区  ›  Bagzli

DateTime ToString()未以指定格式打印

  •  1
  • Bagzli  · 技术社区  · 2 年前

    我正在尝试以以下格式打印日期:01/14/2024。为了实现,我写了以下代码

    @DateTime.UtcNow.ToString("MM/dd/yyyy")
    

    但是,输出看起来是这样的:01-14-2024。

    我有点不明白它为什么要转换成-

    跑步windows 11机器上的Net Core 7 web应用程序。

    4 回复  |  直到 2 年前
        1
  •  3
  •   Etienne de Martel    2 年前

    在日期时间格式中,斜线有一个特殊的含义:它是一个分隔符。它会变成其他东西,这取决于你的文化。

    以下是一个示例:

    var now = DateTime.UtcNow;
    Console.WriteLine(now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture));
    Console.WriteLine(now.ToString("MM/dd/yyyy", CultureInfo.GetCultureInfo("en-US")));
    Console.WriteLine(now.ToString("MM/dd/yyyy", CultureInfo.GetCultureInfo("en-CA")));
    

    在撰写本文时,将打印上述内容

    01/14/2024
    01/14/2024
    01-14-2024
    

    正如你所看到的,加拿大文化使用破折号。美国文化和一成不变的文化一样,都会被斜杠所取代。

    如果您没有指定一种文化(正如您在问题中所做的那样) 现在的 将使用区域性,这取决于您的机器的配置。

    如果对你来说足够好的话,你可以使用不变的文化。

    或者,您可以用反斜杠转义斜杠:

    now.ToString("MM\\/dd\\/yyyy");
    
        2
  •  1
  •   Soner from The Ottoman Empire    2 年前

    这可能取决于您当前的文化。的输出是什么 System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString() ?

    例如,以下方法有效。

    DateTime.UtcNow.ToString("MM/dd/yyyy", new System.Globalization.CultureInfo("en-US"))
    

    但对于土耳其,它的印刷如下。

    DateTime.UtcNow.ToString("MM/dd/yyyy", new System.Globalization.CultureInfo("tr-TR")).Dump();
    //01.14.2024
    
        3
  •  0
  •   Torben Schramme    2 年前

    你必须逃离这样的斜杠:

    @DateTime.UtcNow.ToString("MM'/'dd'/'yyyy")
    

    输出:

    01/14/2024
    

    请注意:无论当前区域性如何,这都将打印斜线。无论代码在哪台机器上运行,当您想要强制特定的输出时,请使用此选项。 如果你想了解文化,这里的其他答案会有所帮助。

        4
  •  -1
  •   Carbon_Based    2 年前

    如果您想将所有的“-”替换为“/”,可以通过使用此行,但将“string”替换为包含“01-14-24”的变量的名称来实现:

    string.Replace("-", "/");
    

    这将遍历整个字符串,并将每个-替换为/。