首頁  >  文章  >  後端開發  >  關於日期顯示格式字串的一點理解

關於日期顯示格式字串的一點理解

巴扎黑
巴扎黑原創
2016-12-20 17:16:551348瀏覽

http://www.cnblogs.com/longsan/archive/2006/04/05/367462.html

今天有網友在q群上貼瞭如下一段程式碼:

strings=Calendar1.TodaysDate.ToString(" d");

想得到"MM/dd/yyyy"的顯示方式,可是總是顯示成"04-01-2006",而不是想要的"04/01/2006"。

一開始我也想當然的認為"MM/dd/yyyy" (自定義格式字符串)或者用"d"
(標準格式字符串)來完成,但是經過實驗,發現總是顯示"04-01 -2006"。後來查了幫助,對這個問題有了下面的一些認識:

1、標準格式字串的顯示是與程式運行機器上的本地區域有關的,即與CultrueInfo相關。例如你的機器上的本地區域設定裡,設定日期之間的間隔符號是"-",那麼你透過上述程式碼顯示的總是"-",除非你修改了本地區域的設定。

2、上述代碼預設的美國英語的顯示方式是"04/01/2006",中文的顯示方式是"04-01-2006",德語的顯示方式是"04.01.2006"。

3、如果不透過修改本地區域的設置,而想實現"04/01/2006"的顯示方式,則應該使用自訂格式字串,上面的程式碼可以寫成下面這樣:

strings=Calendar1. TodaysDate.ToString("MM'/'dd'/'yyyy");


其中兩個單引號括著的是任意字串,在顯示時都會直接顯示。

幾個解決方案:

第一種如上面3所說的。

第二種

Web.Config中,添加:

這是最方便的,但是沒有試.

第三種

控制面板-〉區域選項-〉自訂(時間右邊的按鈕)

可以,不過沒有移植性.

關於一些資料參考:

日期格式化顯示
在SQL中DateTime為8位元長度日期的指定形式為2003-12-31 00:00:00
而在ASP.NET上最常用的只是2003-12-31號一部分而已你可以使用
DateTime.Now.ToString("d")或DateTime.Now.ToShortDateString();
不過具體格式是2003/12/31還是2003-12-31的話要看你的系統配置日期配置是哪一種.
你要想確定取得2003-12-31指定的話使用.Tostring()用戶自訂格式
格式的字元可以看上面說到的文檔.
如.ToString("yyyy-MM-dd")返回2003 -11-25
.ToString("yyyyMMdd")傳回20031125

d 將日顯示為不帶前導零的數字(如1)。如果這是使用者定義的數字格式中的唯一字符,請使用

%d。
dd 將日顯示為帶前導零的數字(如 01)。
ddd 將日顯示為縮寫形式(例如 Sun)。
dddd 將日顯示為全名(例如 Sunday)。
M 將月份顯示為不含前導零的數字(如一月表示為 1)。如果這是使用者定義的數字格式中的唯一

字符,請使用 %M。
MM 將月份顯示為帶前導零的數字(例如 01/12/01)。
MMM 將月份顯示為縮寫形式(例如 Jan)。
MMMM 將月份顯示為完整月份名稱(例如 January)。
gg 顯示時代/紀元字串(例如 A.D.)
h 使用 12 小時制將小時顯示為不帶前導零的數字(例如 1:15:15 PM)。如果這是使用者定義的數

字格式中的唯一字符,請使用 %h。
hh 使用 12 小時制將小時顯示為帶前導零的數字(例如 01:15:15 PM)。
H 使用 24 小時制將小時顯示為不含前導零的數字(例如 1:15:15)。如果這是使用者定義的數字

格式中的唯一字符,請使用 %H。
HH 使用 24 小時制將小時顯示為帶前導零的數字(例如 01:15:15)。
m 將分鐘顯示為不含前導零的數字(例如 12:1:15)。如果這是使用者定義的數字格式中的唯一字

符,請使用 %m。
mm 將分鐘顯示為帶前導零的數字(例如 12:01:15)。
s 將秒顯示為不含前導零的數字(例如 12:15:5)。如果這是使用者定義的數字格式中的唯一字元

,請使用 %s。
ss 將秒顯示為帶前導零的數字(例如 12:15:05)。
F 顯示秒的小數部分。例如,ff 將精確顯示到百分之一秒,而 ffff 將精確顯示到萬分之一秒。

使用者定義格式中最多可使用七個 f 符號。如果這是使用者定義的數字格式中的唯一字符,請使用 %f。
T 使用 12 小時制,並對中午之前的任一小時顯示大寫的 A,對中午到 11:59 P.M 之間的任一小

時顯示大寫的 P。如果這是使用者定義的數字格式中的唯一字符,請使用 %t。
tt 使用 12 小時制,並對中午之前任一小時顯示大寫的 AM;對中午到 11:59 P.M 之間的任一小

時顯示大寫的 PM。
y 將年份 (0-9) 顯示為不含前導零的數字。如果這是使用者定義的數字格式中的唯一字符,請使用

%y。
yy 以帶前導零的兩位數字格式顯示年份(如果適用)。
yyy 以四位數格式顯示年份。
yyyy 以四位數格式顯示年份。
z 顯示不含前導零的時區偏移(如 -8)。如果這是使用者定義的數字格式中的唯一字符,請使用

%z。
zz 顯示帶前導零的時區偏移量(例如-08)
zzz 顯示完整的時區偏移量(例如-08:00)

同樣對時間也可以進行這樣的格式化..你可以使用自定義格式來設定你想要的格式輸出.
你可以使用上表中各字符進行任意的組合不管前後次序多少如你寫入yyyy-yyyy也是可以的.

注意的是:進行格式化的一定要是日期DateTime格式.在SQL中的類型也一樣.否則格式無效或出錯.特別是在DataGrid常{0:IFromat}的格式中會用到

2)日期的輸入
我們在辦理入日期格式式常用DateTime.Pares()
但是這個形式的轉換是相當有限的,有些C#是會不懂你寫入的日期格式的如20031231大家都明白是2003-

12-31號可以C#不認識他.我們可以這樣子進行如下
//設定語言國家
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true);
//指定轉換格式
Response.Write(DateTime.ParseExact(this .TextBox1.Text,"yyyyMMdd",format));
這樣他就能看出20031231號的日期格式了

不過可惜他只能夠對yyyyMMdd形式進行不能對其它格式進行轉換是不是美中不足?
不過可惜. NET提供了另一個重載版本.
public static DateTime ParseExact(string, string[], IFormatProvider, DateTimeStyles);
可轉換指定的幾種日期格式。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn