转换日期显示格式的各种方法

将"2008-10-10"转换成"2008年10月10日"有多种方法,对用中文的系统来说,最简单了:
string originalDateString = "2008-10-10";//转换成"2008年10月10"
string LongDateString = Convert.ToDateTime(originalDateString).ToLongDateString();
但是这种方法,仅仅适用于中文系统,如果Web应用程序服务器是英文系统或者globalization被配置成其他语言,这个结果就不保证了。我们可以使用CultureInfo限定使用简体中文:
string originalDateString = "2008-10-10";//转换成"2008年10月10日"
string LongDateString = Convert.ToDateTime(originalDateString,
	new CultureInfo("zh-CN").DateTimeFormat).ToLongDateString();
我们还可以使用自定义格式化字符串的方法:
string originalDateString = "2008-10-10";//转换成"2008年10月10日"
string LongDateString = Convert.ToDateTime(originalDateString).ToString("yyyy年MM月dd日");
以上方法都是使用Framework自带的DateTime类实现的,转换前需要对日期格式加以判断防止转换成DateTime出现异常。既然讲到限定格式了,很自然的就可以想到正则表达式,正则表达式还有后向引用的功能,正好判断加转换可以一起完成:
string originalDateString = "2008-10-10";//转换成"2008年10月10日"
Regex regex = new Regex("^((?:19|20)?\\d{2})-(0?\\d|1[012])-(0?\\d|[12]\\d|3[01])$");
string LongDateString = regex.Replace(originalDateString, "$1年$2月$3日");
也可以直接使用Regex提供的静态方法:
string originalDateString = "2008-10-10";//转换成"2008年10月10日"
string LongDateString = Regex.Replace(originalDateString,
	"^((?:19|20)?\\d{2})-(0?\\d|1[012])-(0?\\d|[12]\\d|3[01])$", "$1年$2月$3日");
PS:这个正则限制的不是很严格,只要保证日期来源准确,这个正则就已经足够用了,如果要求严格的话可以使用这个正则,加入了每个月的最大日期以及闰年的判断:
/^((((19|20)\d{2})-(0?[13-9]|1[012])-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-(0?[13578]|1[02])-31)|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-29))$/

posted on 2009-06-15 18:31  Lionheart Zhang  阅读(390)  评论(0编辑  收藏  举报

导航