C 日期格式化常用

2021-09-19 21:20:55 字數 1507 閱讀 2704

1、cultureinfo的invariantculture的作用

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

(2)、當進行數字,日期時間,字串匹配時,都會進行cultureinfo的操作,也就是不同的cultureinfo下,這些操作的結果可能會不一樣。這裡要介紹一下非常容易被忽視invariantculture。

2、使用場景

你編寫乙個程式,要向資料中心伺服器傳遞一些時間資料,你會怎麼寫?直接datetime.tostring()?那你就大錯特錯了,下面用**,舉個非常形象的例子。在乙個控制台裡,模擬資料中心,然後放出多個執行緒,模擬客戶端程式傳遞資料。

static readonly string culturesources = ;

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

static void main()

static void client(object obj)

\n傳送資料:\n", cul.displayname, new datetime(1990, 10, 27).toshortdatestring());

}

同樣的datetime.toshortdatestring(),在英語-美國,中文-中國,阿拉伯語-伊拉克和德語-德國的不同環境下,2023年10月27日竟然有如此不同的輸出結果,這些資料讓資料中心伺服器情何以堪啊!!!

造成這個情況的原因是:在進行日期時間輸出時,.net會考慮當前執行緒的cultureinfo,即thread.currentthread.currentculture(或者cultureinfo.currentculture),並根據cultureinfo,進行相應地區文化的資料處理。注意不要和uiculture混淆。

解決方案就是使用這個特殊的invariantculture.解決**如下:

console.writeline("某客戶端作業系統語言設定\n傳送資料:\n", cul.displayname, new datetime(1990, 10, 27).tostring(cultureinfo.invariantculture.datetimeformat.shortdatepattern, cultureinfo.invariantculture));

image

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

C 日期格式化

日期轉化一 為了達到不同的顯示效果有時,我們需要對時間進行轉化,預設格式為 2007 01 03 14 33 34 要轉化為其他格式,要用到datetime.tostring的方法 string,iformatprovider 如下所示 結果輸出 thursday,june 16,2005 引數fo...

c 格式化日期

期轉化 datetime d t datetime.now dt.tostring 2005 11 5 13 21 25 dt.tofiletime tostring 127756416859912000 dt.tofiletimeutc tostring 127756704859912816 dt...

C 日期格式化

一般我們電腦的日期格式都是yyyy m d,這個是系統預設的,但是有的時候,我們為了顯示,可能只顯示年和月yyyy m,這種情況下datepicker控制項顯示的日期也是yyyy m,因此我們通過datepicker控制項的text屬性,獲得的日期也就只有年和月,但這不是我們想要的,我們需要的日,因...