日期转换成字符串几乎是每个项目都要进行的工作,无论您用什么开发工具。在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 这种方式是唯一可用的方案。