日期轉換成字符串幾乎是每個項目都要進行的工作,無論您用什么開發工具。在sql server中使用convert或cast可以方便的轉換日期為各種格式的字符串,在pb中可以用string(date,"yyyy-mm-dd")一步到位。在asp.net中呢?我發現總是不如我意,如果使用yyyy-mm-dd這種方式轉換:
begindate.selecteddate.tostring("yyyy-mm-dd",datetimeformatinfo.invariantinfo)
那么得到到是:2004-00-23
為什么是 00 呢?我百思不得其解。為此,我仔細查看了幫助。下面的代碼來自asp.net的聯機幫助。
下面的示例說明用不變量 datetimeformatinfo 設定 datetime 值的格式的不同方法。
[visual basic]
option explicit
option strict
imports system
imports system.globalization
public class mainclass
public shared sub main()
dim dt as datetime = datetime.now
dim myformat() as string = {"d", "d", _
"f", "f", _
"g", "g", _
"m", _
"r", _
"s", _
"t", "t", _
"u", "u", _
"y", _
"dddd, mmmm dd yyyy", _
"ddd, mmm d ""'""yy", _
"dddd, mmmm dd", _
"m/yy", _
"dd-mm-yy"}
dim mydate as string
dim i as integer
for i = 0 to myformat.length - 1
mydate = dt.tostring(myformat(i), datetimeformatinfo.invariantinfo)
console.writeline(string.concat(myformat(i), " :", mydate))
next i
' output.
'
' d :08/17/2000
' d :thursday, august 17, 2000
' f :thursday, august 17, 2000 16:32
' f :thursday, august 17, 2000 16:32:32
' g :08/17/2000 16:32
' g :08/17/2000 16:32:32
' m :august 17
' r :thu, 17 aug 2000 23:32:32 gmt
' s :2000-08-17t16:32:32
' t :16:32
' t :16:32:32
' u :2000-08-17 23:32:32z
' u :thursday, august 17, 2000 23:32:32
' y :august, 2000
' dddd, mmmm dd yyyy :thursday, august 17 2000
' ddd, mmm d "'"yy :thu, aug 17 '00
' dddd, mmmm dd :thursday, august 17
' m/yy :8/00
' dd-mm-yy :17-08-00
end sub 'main
end class 'mainclass
沒錯啊,人家寫的也是 yyyy-mm-dd 格式,可是人家可以正確返回結果,我的就不可以。慢點,我再觀察一下。難道……難道是大小寫的緣故?沒錯,asp.net剛發布的時候,就宣布過大小寫區分要逐步被提到重要位置上來,徹底改變asp時代大小寫不分的混亂狀態。也就是說,這里的 mm 要寫成 mm 才可以。我抱著試試看的心理修改了,一遍通過,可以成功的返回 2004-08-23 了。求知不能就此結束,我馬上又全部改成大寫:yyyy-mm-dd,結果發現返回 yyyy-08-dd ,也就是說,yyyy-mm-dd 這種方式是唯一可用的方案。