C CultureInfo類案例詳解

2022-09-28 01:30:15 字數 1478 閱讀 8148

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

code如下:

static readonly string culturesources = ;

static readonly random ran = new random(environment.tickcount);

static void main()

console.readline();

}static void client(object obj)

\n資料輸出是:\n", culture.displayname, datetime.now.toshortdatestring());

}執行結果如下:

結果看到了吧,同樣的程式設計客棧datetime.now.toshortdat程式設計客棧estring(),在英語-美國,中文-中國,阿拉伯語-伊拉克和德語-德國的不同環境下,日期輸出格式竟然有如此不同的輸出結果,這樣對使用的使用者來說是很友好的,單對程式設計人員來說,如果對這些資料要處理,就要考慮不同的語言環境中,該怎麼處理了,同時,這些資料讓資料中心伺服器情何以堪啊……

原因分析:

.net會考慮當前執行緒的cultureinfo,即thread.currentthread.currentculture(或者cultureinfo.currentculture),並iwbel根據cultureinfo,進行相應地區文化的資料處理,要解決這個問題,這樣設定

thread.currentthread.currentculture = cultureinfo.invariantculture;//和new cultureinfo("");一樣,使用固定區域性,固定區域性不區分區域性;它與英語語言關聯,但不與任何國家/地區關聯

這樣不管客戶端執行在什麼語言環境下,輸出的時間格式都是統一的,方面資料中心伺服器對資料做後續處理,結果如下圖:

支援多種cultureinfo是整個.net framework更加人性化,因為這可以使同乙個資料適應不同地區和文化,這樣當然滿足處於不同地區和文化的使用者,但前提是資料給「人」看,如果這些資料用於計算機之間的傳輸,即給「機器」看,這樣的多文化處理反而不妥,造成同乙個資料的不同展現形式,尤其是讀寫兩方的文化地區不同時,資料可能根本無法被正常讀取或者產生潛在bug,因此這裡,正是invariantculture的用武之地。

C CultureInfo列表說明

空字串 固定區域性 af 南非荷蘭語 af za 南非荷蘭語 南非 sq 阿爾巴尼亞語 sq al 阿爾巴尼亞語 阿爾巴尼亞 ar 阿拉伯語 ar dz 阿拉伯語 阿爾及利亞 ar bh 阿拉伯語 巴林 ar eg 阿拉伯語 埃及 ar iq 阿拉伯語 伊拉克 ar jo 阿拉伯語 約旦 ar kw...

類模板案例

實現乙個通用的陣列類,要求如下 myarray.hpp中 pragma once include using namespace std templateclass myarray 拷貝構造 myarray const myarray arr 過載 操作符 防止淺拷貝問題 myarray opera...

類模板案例 C

本案例要求 可以對自定義或內建資料型別進行操作 陣列中的資料儲存到堆區 按客戶要求的容量進行陣列的建立 防止淺拷貝以及過載 利用尾插法和尾刪法進行增加和刪除 可以通過下標訪問陣列元素,可以獲取當前陣列中的容量及元素個數資訊。由於類模板的成員函式再呼叫的時候才建立,不好分檔案編寫,所以新建標頭檔案用....