/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.jinhe.tss.core.exception.BusinessException; /** * <p> * 时间、字符串转换工具 * </p> */ public class DateUtil { public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd"; private static final String sdf1reg = "^\\d{2,4}\\-\\d{1,2}\\-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$"; public static final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static final String sdf2reg = "^\\d{2,4}\\-\\d{1,2}\\-\\d{1,2}$"; private static final SimpleDateFormat sdf2 = new SimpleDateFormat(DEFAULT_DATE_PATTERN); private static final String sdf3reg = "^\\d{2,4}\\/\\d{1,2}\\/\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$"; private static final SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); private static final String sdf4reg = "^\\d{2,4}\\/\\d{1,2}\\/\\d{1,2}$"; private static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy/MM/dd"); /** * <p> * 将日期字符串解析成日期对象,支持以下格式 * <li>yyyy-MM-dd HH:mm:ss * <li>yyyy-MM-dd * <li>yyyy/MM/dd HH:mm:ss * <li>yyyy/MM/dd * </p> * * @param str * @return */ public static Date parse(String str) { if(EasyUtils.isNullOrEmpty(str)) return null; Date date = null; Pattern p1 = Pattern.compile(sdf1reg); Matcher m1 = p1.matcher(str); Pattern p2 = Pattern.compile(sdf2reg); Matcher m2 = p2.matcher(str); Pattern p3 = Pattern.compile(sdf3reg); Matcher m3 = p3.matcher(str); Pattern p4 = Pattern.compile(sdf4reg); Matcher m4 = p4.matcher(str); try { if (m1.matches()) { date = sdf1.parse(str); } else if (m2.matches()) { date = sdf2.parse(str); }else if (m3.matches()){ date = sdf3.parse(str); }else if(m4.matches()){ date = sdf4.parse(str); } } catch (ParseException e) { throw new BusinessException("非法日期字符串,解析失败:" + str, e); } return date; } /** * <p> * 将日期格式化成字符串:yyyy-MM-dd * </p> * * @param date * @return */ public static String format(Date date) { if(date == null) return ""; final SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.DEFAULT_DATE_PATTERN); return sdf.format(date); } /** * <p> * 将日期格式化成字符串:yyyy-MM-dd HH:mm:ss * </p> * * @param date * @return */ public static String formatCare2Second(Date date) { if(date == null) return ""; return sdf1.format(date); } /** * <p> * 将日期格式化成相应格式的字符串,如: * <li>yyyy-MM-dd HH:mm:ss * <li>yyyy-MM-dd * <li>yyyy/MM/dd HH:mm:ss * <li>yyyy/MM/dd * </p> * * @param date * @param pattern * @return */ public static String format(Date date, String pattern) { if(date == null) return ""; if (pattern == null || "".equals(pattern)) { pattern = DateUtil.DEFAULT_DATE_PATTERN; } final SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } public static void main(String[] args){ System.out.println(format(new Date(), "yyyy-MM-dd HH:mm:ss")); System.out.println(parse(format(new Date(), "yyyy-MM-dd HH:mm:ss"))); System.out.println(formatCare2Second(new Date())); } }