簡體   English   中英

DateTime的ToLongString方法不返回日期名稱

[英]DateTime's ToLongString method doesn't return day name

我目前正在使用.NET的DateTimeToLongDateString()方法來解析日期字符串。 對於某些文化,這很好:

US: Wednesday, May 16, 2001

但是對於其他一些文化,則省略了日期名稱(例如荷蘭,匈牙利和冰島文化)。

NL: 16 mei 2001

這些區域性的DayNames數組包含一周中每一天的專有名稱,但是由於某些原因,它們不在長日期字符串中使用。

我嘗試使用DateTimeFormat.DayNames [i] + "D"格式設置解決方案,但在這里不起作用,因為它會在已經顯示日期名稱的區域性中導致雙天名稱。

 US: Wednesday Wednesday, May 16, 2001
 NL: woensdag 16 mei 2001

是否有任何方法可以使默認省略的區域性顯示日期名稱?

沒錯。

.NET會執行它應做的事情,如果您查看Windows pc的區域設置,則可以更改區域性並查看“日期(長)”字段中顯示的內容,然后將看到以下內容:

對於荷蘭人:d。 MMMM YYYY

匈牙利語:YYYY。 MMMM d。

對於冰島人:d。 MMMM YYYY

如果您真的想為所有這些文件都擁有它,則必須手動添加它,或者使用

DateTime.Now.ToString("dddd, dd MM YYYY");

看看此頁面,看看在Windows 7 pc上哪里可以找到區域設置: http : //windows.microsoft.com/en-us/windows7/change-the-country-or-region-setting

許多文化都有多種長日期模式,您可以從中選擇第一個包含星期幾模式的模式:

    static void Main(string[] args)
    {
        foreach (var cultureInfo in System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures))
        {
            string longDateWithDayOfWeek = null;
            foreach (var pattern in cultureInfo.DateTimeFormat.GetAllDateTimePatterns('D'))
            {
                if (pattern.Contains("ddd"))
                {
                    longDateWithDayOfWeek = pattern;
                    break;
                }
            }

            bool isFallbackRequired = string.IsNullOrEmpty(longDateWithDayOfWeek);
            if (isFallbackRequired)
            {
                longDateWithDayOfWeek = "dddd, " + cultureInfo.DateTimeFormat.LongDatePattern;
            }
            System.Console.WriteLine("{0} - {1} {2}", cultureInfo.Name, longDateWithDayOfWeek, (isFallbackRequired) ? " (generated)" : string.Empty);
        }
    }

這樣可以為荷蘭語和冰島語提供支持,而匈牙利語需要您多做一些研究才能正確覆蓋。

如果您考慮的是自己的問題,那么很明顯,您需要檢查並自行添加。

您基本上是說“如果區域性X不包含日期名稱,請添加日期名稱”,其翻譯為:

var date = DateTime.Now;

if(!date.ToLongDateString().Contains(date.ToString("dddd"))
    //Add it
DateTime dt = new DateTime(2001, 5, 16);
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("nl-NL");
Debug.WriteLine(dt.ToLongDateString());

// output:  woensdag 16 mei 2001

我想,其他文化可能不包含星期名的天格式,但是你提供的一個 -至少我的機器上。

需要注意的一件事,如果要自己檢查並添加它,是否確定它應該始終位於字符串的開頭? 在許多文化中都是這樣,但也許並非所有人都這樣工作。 另外,分隔符呢? 此處僅使用空格,但是許多使用逗號和空格。 其他人可能會使用不同的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM