簡體   English   中英

C#解析到日期時間,與區域性信息無關

[英]C# parsing to datetime regardless of culture info

我在解析語言不是英語的某些日期字符串時遇到問題。 示例日期字符串為“ 8 avril 2016 vendredi”,其英文為“ 2016年4月8日星期五”。

我已經嘗試過了,但是沒有運氣。

DateTime dateTime;
DateTime.TryParse("8 avril 2016 vendredi", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);

就我而言,日期字符串可以使用任何語言,因此我無法在解析中指定區域性。
我感謝您的幫助。 謝謝。

看哪,任何解析器都可怕!

CultureInfo.GetCultures(CultureTypes.AllCultures).Select(culture => {
    DateTime result;
    return DateTime.TryParse(
        "8 avril 2016 vendredi", 
        culture, 
        DateTimeStyles.None, 
        out result
    ) ? result : default(DateTime?);
})
.Where(d => d != null)
.GroupBy(d => d)
.OrderByDescending(g => g.Count())
.FirstOrDefault()
.Key

這要求系統上的每種區域性都解析日期,並選擇最常出現的日期作為“獲勝者”。 如果沒有文化可以解析日期,則返回null

不難想到這可能無法提供正確的結果,因為最常見的結果不一定是正確的結果,並且某些日期確實是模棱兩可的。 是“ 04-05-2016”是5月4日還是4月5日? 任何分析器都認為五月四號更有可能只是因為更多的文化以這種方式對其進行了分析。 至少在我的機器上。 但這並不能取悅美國作家(在互聯網上任職人數過多的作家),因此也許需要考慮文化的可能性。

不應使用此代碼來分析任意用戶輸入,更不用說所有輸入了,甚至在真正缺乏關於該語言的所有其他線索的刮板程序的上下文中,這也不是最佳方法。 還要注意,這很慢。 一台普通機器上有數百種文化。 首先猜測頁面的整個文化,然后根據該頁面進行一致的解析絕對是一個更好的主意。

暫無
暫無

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

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