C#中的CultureInfo類

来源:https://www.cnblogs.com/LagoOrLY/archive/2019/01/24/10313193.html
-Advertisement-
Play Games

CultureInfo類位於System.Globalization命名空間內,這個類和命名空間許多人都不是很熟悉,實際我們在寫程式寫都經常間接性的接觸這個類,當進行數字,日期時間,字元串匹配時,都會進行CultureInfo的操作,也就是說,也就是不同的CultureInfo下,這些操作的結果可能 ...


CultureInfo類位於System.Globalization命名空間內,這個類和命名空間許多人都不是很熟悉,實際我們在寫程式寫都經常間接性的接觸這個類,當進行數字,日期時間,字元串匹配時,都會進行CultureInfo的操作,也就是說,也就是不同的CultureInfo下,這些操作的結果可能會不一樣,由於我們大部分開發部署都是在同一種語言環境中,平日里可能沒有感覺到它的用處,如果你的開發的項目是給國外用戶用的,有可能在你機器上運行輸出是一種效果,在客戶機器上是另一種輸出效果,這句需要用到CultureInfo類了,對使用用戶來說,這也是ms提供的人性化的一面(比方說,同樣是日期,中文環境輸出符合中國人的習慣,德語環境中的輸出符合德國人的習慣,這是預設的輸出方式),但對開發人員和服務數據中心來說,就要選擇是保證統一的輸出,還是用ms的預設方式了。
code如下:

 1    static readonly string[] CultureSources = { "en-us", "zh-cn", "ar-iq", "de-de" };
 2         static readonly Random Ran = new Random(Environment.TickCount);
 3 
 4 
 5         static void Main()
 6         {
 7             for (int i = 0; i < CultureSources.Length; i++){
 8                 ThreadPool.QueueUserWorkItem(Client, i);
 9 }
10             Console.ReadLine();
11         }
12 
13 
14         static void Client(object obj)
15         {
16             int id = (int)obj;
17             Thread.Sleep(Ran.Next(1000));
18             CultureInfo culture = CultureInfo.GetCultureInfo(CultureSources[id]);            
19             Thread.CurrentThread.CurrentCulture = culture;
20             Console.WriteLine("操作系統語言設置成{0}\n數據輸出是:{1}\n", culture.DisplayName, DateTime.Now.ToShortDateString());
21         }

運行結果如下:

結果看到了吧,同樣的DateTime.Now.ToShortDateString(),在英語-美國,中文-中國,阿拉伯語-伊拉克和德語-德國的不同環境下,日期輸出格式竟然有如此不同的輸出結果,這樣對使用的用戶來說是很友好的,單對編程人員來說,如果對這些數據要處理,就要考慮不同的語言環境中,該怎麼處理了,同時,這些數據讓數據中心伺服器情何以堪啊……
原因分析:
.NET會考慮當前線程的CultureInfo,即Thread.CurrentThread.CurrentCulture(或者CultureInfo.CurrentCulture),並根據CultureInfo,進行相應地區文化的數據處理,要解決這個問題,這樣設置
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;//和new CultureInfo("");一樣,使用固定區域性,固定區域性不區分區域性;它與英語語言關聯,但不與任何國家/地區關聯
這樣不管客戶端運行在什麼語言環境下,輸出的時間格式都是統一的,方便數據中心伺服器對數據做後續處理。

結果如下圖:

支持多種CultureInfo是整個.NET Framework更加人性化,因為這可以使同一個數據適應不同地區和文化,這樣當然滿足處於不同地區和文化的用戶,但前提是數據給“人”看,如果這些數據用於電腦之間的傳輸,即給“機器”看,這樣的多文化處理反而不妥,造成同一個數據的不同展現形式,尤其是讀寫兩方的文化地區不同時,數據可能根本無法被正常讀取或者產生潛在bug,因此這裡,正是InvariantCulture的用武之地。

轉載自:https://blog.csdn.net/xuwei_xuwei/article/details/32717259


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 序 一直都是在看別人的博客,查到想要的,看完後把頁面一關就萬事大吉了,沒啥感覺;直到後來遇到了同樣的問題,總想不起來咋弄,關鍵是還查不到以前看過的,鬱悶!現在想想,還是“好記性不如爛筆頭”啊,自己弄過的東西總要留下的什麼呀,不然你都不知道自己曾經多麼優秀。註冊博客園也好久了,因為不知道該寫點啥,再加 ...
  • ...
  • 一.Exceptionless簡介 Exceptionless 是一個開源的實時的日誌收集框架,它可以應用在基於 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技術棧的應用程式中,並且提供了Rest介面可以應用在 Javascript ...
  • c#行轉列 今天工作中,恰好寫到此處,想起之前第一次行轉列的時候,卡殼了好久,今天正好碰上,故而花費幾分鐘,整理成案例,分享到博客上。 這是個很簡單的功能,第一次可以使用案例,後面最好能達到信手拈來的地步。 開發要素第一步: 各種控制項的命名要改:這個跟技術能力無關,工作再趕再忙,這個也必須要改,因為 ...
  • nginx反向代理後abp的webapi host如何獲取客戶端ip ...
  • 騰訊雲通信後臺生成usersig只有java實現代碼。以下是根據java代碼轉換為net實現,java版GitHub地址:https://github.com/TencentVideoCloudMLVBDev/usersig_server_source/blob/master/java/WebRTC ...
  • sn.exe 和ilasm.exe 是系統自帶程式。如果顯示無此命令,可以從“我的電腦”直接搜索。將dll文件放入目錄下,用VS開發人員命令執行以下命令即可。(以Interop.Scripting.dll為例)1.創建一個新的隨機密鑰對:sn -k Interop.Scripting.snk2.反編 ...
  • ASP.NET Core 可以用作傳統的web服務、RESTful服務、遠程過程調用(RPC)服務、微服務,這歸功於它的跨平臺支持和輕量級設計 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...