首页 > 解决方案 > DateTimeFormatInfo.GetAllDateTimePatterns() 的重大更改记录在哪里?

问题描述

考虑以下代码:

using System;
using System.Globalization;

namespace Demo
{
    static class Program
    {
        public static void Main()
        {
            var culture = CultureInfo.CreateSpecificCulture("EN-us");
            Console.WriteLine(string.Join("\n", culture.DateTimeFormat.GetAllDateTimePatterns()));
        }
    }
}

当面向 .net Core 3.1(或 .net Framework 4.8)时,会显示:

M/d/yyyy
M/d/yy
MM/dd/yy
MM/dd/yyyy
yy/MM/dd
yyyy-MM-dd
dd-MMM-yy
dddd, MMMM d, yyyy
MMMM d, yyyy
dddd, d MMMM, yyyy
d MMMM, yyyy
dddd, MMMM d, yyyy h:mm tt
dddd, MMMM d, yyyy hh:mm tt
dddd, MMMM d, yyyy H:mm
dddd, MMMM d, yyyy HH:mm
MMMM d, yyyy h:mm tt
MMMM d, yyyy hh:mm tt
MMMM d, yyyy H:mm
MMMM d, yyyy HH:mm
dddd, d MMMM, yyyy h:mm tt
dddd, d MMMM, yyyy hh:mm tt
dddd, d MMMM, yyyy H:mm
dddd, d MMMM, yyyy HH:mm
d MMMM, yyyy h:mm tt
d MMMM, yyyy hh:mm tt
d MMMM, yyyy H:mm
d MMMM, yyyy HH:mm
dddd, MMMM d, yyyy h:mm:ss tt
dddd, MMMM d, yyyy hh:mm:ss tt
dddd, MMMM d, yyyy H:mm:ss
dddd, MMMM d, yyyy HH:mm:ss
MMMM d, yyyy h:mm:ss tt
MMMM d, yyyy hh:mm:ss tt
MMMM d, yyyy H:mm:ss
MMMM d, yyyy HH:mm:ss
dddd, d MMMM, yyyy h:mm:ss tt
dddd, d MMMM, yyyy hh:mm:ss tt
dddd, d MMMM, yyyy H:mm:ss
dddd, d MMMM, yyyy HH:mm:ss
d MMMM, yyyy h:mm:ss tt
d MMMM, yyyy hh:mm:ss tt
d MMMM, yyyy H:mm:ss
d MMMM, yyyy HH:mm:ss
M/d/yyyy h:mm tt
M/d/yyyy hh:mm tt
M/d/yyyy H:mm
M/d/yyyy HH:mm
M/d/yy h:mm tt
M/d/yy hh:mm tt
M/d/yy H:mm
M/d/yy HH:mm
MM/dd/yy h:mm tt
MM/dd/yy hh:mm tt
MM/dd/yy H:mm
MM/dd/yy HH:mm
MM/dd/yyyy h:mm tt
MM/dd/yyyy hh:mm tt
MM/dd/yyyy H:mm
MM/dd/yyyy HH:mm
yy/MM/dd h:mm tt
yy/MM/dd hh:mm tt
yy/MM/dd H:mm
yy/MM/dd HH:mm
yyyy-MM-dd h:mm tt
yyyy-MM-dd hh:mm tt
yyyy-MM-dd H:mm
yyyy-MM-dd HH:mm
dd-MMM-yy h:mm tt
dd-MMM-yy hh:mm tt
dd-MMM-yy H:mm
dd-MMM-yy HH:mm
M/d/yyyy h:mm:ss tt
M/d/yyyy hh:mm:ss tt
M/d/yyyy H:mm:ss
M/d/yyyy HH:mm:ss
M/d/yy h:mm:ss tt
M/d/yy hh:mm:ss tt
M/d/yy H:mm:ss
M/d/yy HH:mm:ss
MM/dd/yy h:mm:ss tt
MM/dd/yy hh:mm:ss tt
MM/dd/yy H:mm:ss
MM/dd/yy HH:mm:ss
MM/dd/yyyy h:mm:ss tt
MM/dd/yyyy hh:mm:ss tt
MM/dd/yyyy H:mm:ss
MM/dd/yyyy HH:mm:ss
yy/MM/dd h:mm:ss tt
yy/MM/dd hh:mm:ss tt
yy/MM/dd H:mm:ss
yy/MM/dd HH:mm:ss
yyyy-MM-dd h:mm:ss tt
yyyy-MM-dd hh:mm:ss tt
yyyy-MM-dd H:mm:ss
yyyy-MM-dd HH:mm:ss
dd-MMM-yy h:mm:ss tt
dd-MMM-yy hh:mm:ss tt
dd-MMM-yy H:mm:ss
dd-MMM-yy HH:mm:ss
MMMM d
MMMM d
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
yyyy'-'MM'-'dd'T'HH':'mm':'ss
h:mm tt
hh:mm tt
H:mm
HH:mm
h:mm:ss tt
hh:mm:ss tt
H:mm:ss
HH:mm:ss
yyyy'-'MM'-'dd HH':'mm':'ss'Z'
dddd, MMMM d, yyyy h:mm:ss tt
dddd, MMMM d, yyyy hh:mm:ss tt
dddd, MMMM d, yyyy H:mm:ss
dddd, MMMM d, yyyy HH:mm:ss
MMMM d, yyyy h:mm:ss tt
MMMM d, yyyy hh:mm:ss tt
MMMM d, yyyy H:mm:ss
MMMM d, yyyy HH:mm:ss
dddd, d MMMM, yyyy h:mm:ss tt
dddd, d MMMM, yyyy hh:mm:ss tt
dddd, d MMMM, yyyy H:mm:ss
dddd, d MMMM, yyyy HH:mm:ss
d MMMM, yyyy h:mm:ss tt
d MMMM, yyyy hh:mm:ss tt
d MMMM, yyyy H:mm:ss
d MMMM, yyyy HH:mm:ss
MMMM yyyy
MMMM yyyy

但是,当面向 .net 5.0 时,会显示:

M/d/yyyy
MMM d, yyyy
M/d/yy
dddd, MMMM d, yyyy
MMMM d, yyyy
dddd, MMMM d, yyyy h:mm tt
MMMM d, yyyy h:mm tt
dddd, MMMM d, yyyy h:mm:ss tt
MMMM d, yyyy h:mm:ss tt
M/d/yyyy h:mm tt
MMM d, yyyy h:mm tt
M/d/yy h:mm tt
M/d/yyyy h:mm:ss tt
MMM d, yyyy h:mm:ss tt
M/d/yy h:mm:ss tt
MMMM d
MMMM d
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
yyyy'-'MM'-'dd'T'HH':'mm':'ss
h:mm tt
h:mm:ss tt
yyyy'-'MM'-'dd HH':'mm':'ss'Z'
dddd, MMMM d, yyyy h:mm:ss tt
MMMM d, yyyy h:mm:ss tt
MMMM yyyy
MMMM yyyy

显然,这是一个突破性的变化。我在https://docs.microsoft.com/en-us/dotnet/core/compatibility/5.0上查找了文档,但找不到任何提及GetAllDateTimePatterns().

有谁知道此更改记录在哪里?

(我们遇到的一个具体问题是模式列表不包含任何内容M/d/yy h:mm- 它只包含M/d/yy h:mm tt该格式必须包含一个上午/下午指标。事实上,所有格式包括小时和分钟也需要一个上午/下午指示器。)

标签: c#datetime

解决方案


推荐阅读