通用的字符串转日期方式

原创
2016/10/20 14:32
阅读数 447

String 转java.util.Date的一般做法是这个样子滴

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");  
    Date date = sdf.parse("2012-12-06 ");  

    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd ");  
    Date date = sdf2.parse("2012/12/06 ");  

如果要解析 2012年12月06日那是不是要把模式改成 yyyy年MM月dd日??是不是很麻烦

那么问题来了, 如何做个比较通用的解析方法呢?

有些同学说可以多定义几种匹配模式, 给大家演示基本做法

    private static final String[] pattern = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss" };
	public static Date parseDate(String source) {
		for (int i = 0; i < pattern.length; i++) {
			try {
				return new SimpleDateFormat(pattern[i]).parse(source);
			} catch (ParseException e) {}
		}
		return null;
	}

办法倒是可行,可还是面临两个问题

  1. 就是当解析失败时(抛出异常)再用另外一个模式进行匹配,直到解析成功. 同学们, 异常啊,注意是异常, 要抛多少次啊,我的天那!!!
  1. 这么多模式,你匹配的完吗??不现实啊,对不对

下面是一个比较通用的解析方式

public static Date parseDate(String source) {
		if(source == null || source.isEmpty()) return null;
		
		int index = 0;
		StringBuffer pattern = new StringBuffer();
		char[] chars = source.toCharArray();
		
		for (int i = 0; i < chars.length; i++) {
			if (Character.isDigit(chars[i])) {
				switch (index) {
				case 0:
					pattern.append("y");
					break;
				case 1:
					pattern.append("M");
					break;
				case 2:
					pattern.append("d");
					break;
				case 3:
					pattern.append("H");
					break;
				case 4:
					pattern.append("m");
					break;
				case 5:
					pattern.append("s");
					break;
				case 6:
					pattern.append("S");
					break;
				}
			} else{
				pattern.append(chars[i]);
				index++;
			}
		}
		
		try {
			return new SimpleDateFormat(pattern.toString()).parse(source);
		} catch (ParseException e) {
			return null;
		}
	}

测试下

parseDate("2016年12月11日"); 
parseDate("16年2月11日")
parseDate("16年2月11日11点22分")
parseDate("16-2-11 11点22分50秒")
parseDate("016/2_11/11/22/50")
parseDate("2016/02/11日 11-22-50")
parseDate("2016/02/11添加干扰文字试试"); //依然可以匹配成功

嗯就是这样,根据数字解析出模式. 有没有焕然一新的感觉

展开阅读全文
加载中

作者的其它热门文章

打赏
0
1 收藏
分享
打赏
2 评论
1 收藏
0
分享
返回顶部
顶部