兜兜的学习札记

人類的全部才能無非是時間和耐心的混合物.---巴尔扎克
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

How to convert a String to DateTime

Posted on 2006-12-13 11:17  小小兜  阅读(3051)  评论(0编辑  收藏  举报
昨天在做项目的时候遇到了这个问题,因为在WebControl里面并不包含对DateTimePicker控件的定义,
所以对时间的处理可以选择控制String的格式,然后将String转化成DateTime再储存到数据库中。
如何将String转化成DateTime类型呢,如下面代码所示:

            // Set the birthday of the employee.
            if (!string.IsNullOrEmpty(txtBirthday.Text))
            
{
                employee.Birthday 
= DateTime.Parse(txtBirthday.Text,
                    System.Globalization.DateTimeFormatInfo.CurrentInfo);
            }

这是其中的一种方法,可以将类似于2006-1-1,2006-01-01等格式的日期转化成DateTime类型,另外还有一个方法:

            // Set the birthday of the employee.
            if (!string.IsNullOrEmpty(txtBirthday.Text))
            
{
                employee.Birthday 
= DateTime.ParseExact(txtBirthday.Text,
                   
"yyyy-MM-dd", System.Globalization.DateTimeFormatInfo.CurrentInfo);
            }

可以自己定义所转化的日期的格式。

但是实际上这样从页面空间上直接通过输入字符串的方式来填写日期,并转化为DateTime类型保存到数据库中还是比较危险的。
如果输入的字符串稍有差池,就会带来Exception。配合下面的正则表达式就好办了,这个是从网上搜刮来的超强的判断输入日期
格式的正则表达式,允许输入的日期格式为yyyy-MM-dd,其中输入2006-1-1,2006-01-01这种格式都是有效的,而且包含了对不同
年份2月的天数,闰年的控制等等:

^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$

所以在界面txtBirthday输入框增加一个RegularExpressionValidator配合使用控制日期的输入格式就可以了。