DateTimeFormatInfo.GetShortestDayName(DayOfWeek)應該回傳名稱,如Su,等,如Microsoft 檔案Mo中示例的輸出所示。
相反,我只收到一個字母:S,M等。
重現代碼:(我使用的是 WPF .Net 6)
DateTimeFormatInfo en_us = CultureInfo.GetCultureInfo("en-US").DateTimeFormat;
string s = en_us.GetShortestDayName(DayOfWeek.Tuesday);
這對我沒有用,因為例如星期二和星期四,它們具有相同的識別符號。什么可能導致此問題,以便我可以修復它并獲得預期Su的 ,Mo等?
uj5u.com熱心網友回復:
您可以將以下設定添加到您的 ( .csproj) 專案檔案中,以不使用 .NET 5 中引入的ICU 全球化 API:
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
uj5u.com熱心網友回復:
這很可能是“設計使然”,因為從特定于 Windows 的獲取全球化資訊的方式轉換為公開可用資料的結果。
以下文章重大更改:全球化 API 在 Windows 上使用 ICU 庫解釋了更改(但確實沒有詳細說明“如果更改短名稱”):
從 .NET 5 開始,如果應用在 Windows 2019 年 5 月 10 日更新或更高版本上運行,則 .NET 庫默認使用 ICU 全球化 API。
ICU網站將縮寫列為組件之一(突出顯示是我的):
格式化:根據所選區域設定的慣例格式化數字、日期、時間和貨幣金額。這包括將月份和日期名稱翻譯成所選語言、選擇適當的縮寫、正確排序欄位等。這些資料也來自 Common Locale Data Repository。
uj5u.com熱心網友回復:
這似乎是從 .NET 4.7.2 到 .NET Core 6 的變化(可能是所有版本的 .NET Core - 我現在無法確認)。
在 .NET 4.7.2 中,我得到兩個字符的結果;在 .NET 6 中,我得到一個字符的結果。
我也沒有看到任何在線檔案表明該更改是故意的重大更改。
我會提交一個錯誤票來更新檔案(并承認這是一個重大更改)或恢復行為。
一種解決方法是采用 . 的前兩個字符GetAbbreviatedDayName。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457176.html
