我有一大堆日期string,想要把他转换为一个DD/MM/YYYY的格式。我知道首先要parse日期, 就要写一个pattern来获取那个日期string比如用dd-MMM-yyyy HH:mm:ss 来获取 24-Feb-1998 17:39:35但是呢,我的那些日期string 格式多种多样, 比如2 Feb, 2008
2nd Feb, 2008
Feb 2, 2008
Feb 2, (空格) 2008
Febuary 2nd 2008
2008 08 01
这么多种日期格式的可能性,我不可能把他们的pattern全部写进去吧? 比如日月与年之间的空格是不定数的,那就更头疼。有没有像正则表达式那样灵活的获取方法呢? 就是可以一个式子包括多种可能性的格式。
2nd Feb, 2008
Feb 2, 2008
Feb 2, (空格) 2008
Febuary 2nd 2008
2008 08 01
这么多种日期格式的可能性,我不可能把他们的pattern全部写进去吧? 比如日月与年之间的空格是不定数的,那就更头疼。有没有像正则表达式那样灵活的获取方法呢? 就是可以一个式子包括多种可能性的格式。
楼主【lokowu】截止到2008-07-27 02:35:10的历史汇总数据(不包括此帖):
发帖的总数量:5 发帖的总分数:80 每贴平均分数:16
回帖的总数量:7 得分贴总数量:1 回帖的得分率:14%
结贴的总数量:5 结贴的总分数:80
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:20.00 % 无满意结分率:25.00 %
敬礼!
我的那些日期string来源是网上的一些文章。我总不能告诉全世界的人都统一格式吧 -____-
package net.pcedu.crmsystem.util;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;/**
* 日期工具类
* <p>
* 可获取当前日期,转化日期格式,解析<code>String</code>型的日期为<code>Date</code>类型等
*
* @author jackie
* @see java.text.SimpleDateFormat
*/ public class DateUtils { public final static String YYYY = "yyyy"; public final static String MM = "MM"; public final static String DD = "dd"; public final static String YYYY_MM_DD = "yyyy-MM-dd"; public final static String YYYY_MM = "yyyy-MM"; public final static String HH_MM_SS = "HH:mm:ss"; public final static String HH_MM = "HH:mm"; public final static String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm"; public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; /**
* 构造函数
*/
public DateUtils() {
} /**
* 日期格式化-将<code>Date</code>类型的日期格式化为<code>String</code>型
*
* @param date
* 待格式化的日期
* @param pattern
* 时间样式
* @return 一个被格式化了的<code>String</code>日期
*/
public static String format(Date date, String pattern) {
if (date == null)
return "";
else
return getFormatter(pattern).format(date);
} /**
* 默认为yyyy-MM-dd的格式化
*
* @param date
* @return
* @Fixed by luyz
*/
public static String format(Date date) {
if (date == null)
return "";
else
return getFormatter("yyyy-MM-dd").format(date);
} /**
* 日期解析-将<code>String</code>类型的日期解析为<code>Date</code>型
*
* @param date
* 待格式化的日期
* @param pattern
* 日期样式
* @exception ParseException
* 如果所给的字符串不能被解析成一个日期
* @return 一个被格式化了的<code>Date</code>日期
*/
public static Date parse(String strDate, String pattern)
throws ParseException {
try {
return getFormatter(pattern).parse(strDate);
} catch (ParseException pe) {
throw new ParseException(
"Method parse in Class DateUtils err: parse strDate fail.",
pe.getErrorOffset());
}
} /**
* 默认为yyyy-MM-dd格式的解析
*
* @param strDate
* @return
* @throws ParseException
* @Fixed by luyz
*/
public static Date parse(String strDate) throws ParseException {
try {
return getFormatter("yyyy-MM-dd").parse(strDate);
} catch (ParseException pe) {
throw new ParseException(
"Method parse in Class DateUtils err: parse strDate fail.",
pe.getErrorOffset());
}
} /**
* 获取当前日期
*
* @return 一个包含年月日的<code>Date</code>型日期
*/
public static synchronized Date getCurrDate() {
Calendar calendar = Calendar.getInstance();
return calendar.getTime();
} /**
* 获取当前日期
*
* @return 一个包含年月日的<code>String</code>型日期,但不包含时分秒。yyyy-mm-dd
*/
public static String getCurrDateStr() {
return format(getCurrDate(), YYYY_MM_DD);
} /**
* 获取当前时间
*
* @return 一个包含年月日时分秒的<code>String</code>型日期。hh:mm:ss
*/
public static String getCurrTimeStr() {
return format(getCurrDate(), HH_MM_SS);
} public static String getCurrHMStr() {
return format(getCurrDate(), HH_MM);
} /**
* 获取当前完整时间,样式: yyyy-MM-dd hh:mm:ss
*
* @return 一个包含年月日时分秒的<code>String</code>型日期。yyyy-MM-dd hh:mm:ss
*/
public static String getCurrDateTimeStr() {
return format(getCurrDate(), YYYY_MM_DD_HH_MM_SS);
} /**
* 获取当前时间,不要秒(此处依据安阳局变电运行管理需求),样式: yyyy-MM-dd hh:mm
*
* @return 一个包含年月日时分秒的<code>String</code>型日期。yyyy-MM-dd hh:mm
*/
public static String getCurrDateTimeStr0() {
return format(getCurrDate(), YYYY_MM_DD_HH_MM);
} /**
* 获取当前年分 样式:yyyy
*
* @return 当前年分
*/
public static String getYear() {
return format(getCurrDate(), YYYY);
} /**
* 获取当前月分 样式:MM
*
* @return 当前月分
*/
public static String getMonth() {
return format(getCurrDate(), MM);
} /**
* 获取当前日期号 样式:dd
*
* @return 当前日期号
*/
public static String getDay() {
return format(getCurrDate(), DD);
} /**
* 按给定日期样式判断给定字符串是否为合法日期数据
*
* @param strDate
* 要判断的日期
* @param pattern
* 日期样式
* @return true 如果是,否则返回false
*/
public static boolean isDate(String strDate, String pattern) {
try {
parse(strDate, pattern);
return true;
} catch (ParseException pe) {
return false;
}
} /**
* 判断给定字符串是否为特定格式日期(包括:年月日yyyy-MM-dd)数据
*
* @param strDate
* 要判断的日期
* @return true 如果是,否则返回false
*/
// public static boolean isDate(String strDate) {
// try {
// parse(strDate, YYYY_MM_DD);
// return true;
// }
// catch (ParseException pe) {
// return false;
// }
// }
/**
* 判断给定字符串是否为特定格式年份(格式:yyyy)数据
*
* @param strDate
* 要判断的日期
* @return true 如果是,否则返回false
*/
public static boolean isYYYY(String strDate) {
try {
parse(strDate, YYYY);
return true;
} catch (ParseException pe) {
return false;
}
} public static boolean isYYYY_MM(String strDate) {
try {
parse(strDate, YYYY_MM);
return true;
} catch (ParseException pe) {
return false;
}
} /**
* 判断给定字符串是否为特定格式的年月日(格式:yyyy-MM-dd)数据
*
* @param strDate
* 要判断的日期
* @return true 如果是,否则返回false
*/
public static boolean isYYYY_MM_DD(String strDate) {
try {
parse(strDate, YYYY_MM_DD);
return true;
} catch (ParseException pe) {
return false;
}
} /**
* 判断给定字符串是否为特定格式年月日时分秒(格式:yyyy-MM-dd HH:mm:ss)数据
*
* @param strDate
* 要判断的日期
* @return true 如果是,否则返回false
*/
public static boolean isYYYY_MM_DD_HH_MM_SS(String strDate) {
try {
parse(strDate, YYYY_MM_DD_HH_MM_SS);
return true;
} catch (ParseException pe) {
return false;
}
} public static boolean isYYYY_MM_DD_HH_MM(String strDate) {
try {
parse(strDate, YYYY_MM_DD_HH_MM);
return true;
} catch (ParseException pe) {
return false;
}
} /**
* 判断给定字符串是否为特定格式时分秒(格式:HH:mm:ss)数据
*
* @param strDate
* 要判断的日期
* @return true 如果是,否则返回false
*/
public static boolean isHH_MM_SS(String strDate) {
try {
parse(strDate, HH_MM_SS);
return true;
} catch (ParseException pe) {
return false;
}
}
* 判断给定字符串是否为特定格式时间(包括:时分秒hh:mm:ss)数据
*
* @param strTime
* 要判断的时间
* @return true 如果是,否则返回false
*/
// public static boolean isTime(String strTime) {
// try {
// parse(strTime, HH_MM_SS);
// return true;
// }
// catch (ParseException pe) {
// return false;
// }
// }
/**
* 判断给定字符串是否为特定格式日期时间(包括:年月日时分秒 yyyy-MM-dd hh:mm:ss)数据
*
* @param strDateTime
* 要判断的日期时间
* @return true 如果是,否则返回false
*/
// public static boolean isDateTime(String strDateTime) {
// try {
// parse(strDateTime, YYYY_MM_DD_HH_MM_SS);
// return true;
// }
// catch (ParseException pe) {
// return false;
// }
// }
/**
* 获取一个简单的日期格式化对象
*
* @return 一个简单的日期格式化对象
*/
private static SimpleDateFormat getFormatter(String parttern) {
return new SimpleDateFormat(parttern);
} /**
* 获取给定日前的后intevalDay天的日期
*
* @param refenceDate
* 给定日期(格式为:yyyy-MM-dd)
* @param intevalDays
* 间隔天数
* @return 计算后的日期
*/
public static String getNextDate(String refenceDate, int intevalDays) {
try {
return getNextDate(parse(refenceDate, YYYY_MM_DD), intevalDays);
} catch (Exception ee) {
return "";
}
} /**
* 获取给定日前的后intevalDay天的日期
*
* @param refenceDate
* Date 给定日期
* @param intevalDays
* int 间隔天数
* @return String 计算后的日期
*/
public static String getNextDate(Date refenceDate, int intevalDays) {
try {
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime(refenceDate);
calendar.set(calendar.DATE, calendar.get(calendar.DATE)
+ intevalDays);
return format(calendar.getTime(), YYYY_MM_DD);
} catch (Exception ee) {
return "";
}
} public static long getIntevalDays(String startDate, String endDate) {
try {
return getIntevalDays(parse(startDate, YYYY_MM_DD), parse(endDate,
YYYY_MM_DD));
} catch (Exception ee) {
return 0l;
}
} public static long getIntevalDays(Date startDate, Date endDate) {
try {
java.util.Calendar startCalendar = java.util.Calendar.getInstance();
java.util.Calendar endCalendar = java.util.Calendar.getInstance(); startCalendar.setTime(startDate);
endCalendar.setTime(endDate);
long diff = endCalendar.getTimeInMillis()
- startCalendar.getTimeInMillis(); return (diff / (1000 * 60 * 60 * 24));
} catch (Exception ee) {
return 0l;
}
} public static double getIntevalHours(Date startDate, Date endDate) {
try {
java.util.Calendar startCalendar = java.util.Calendar.getInstance();
java.util.Calendar endCalendar = java.util.Calendar.getInstance(); startCalendar.setTime(startDate);
endCalendar.setTime(endDate);
long diff = endCalendar.getTimeInMillis()
- startCalendar.getTimeInMillis(); return ((double) diff / (1000 * 60 * 60));
} catch (Exception ee) {
return 0.0;
}
} /**
* debug
*/
public static void main(String[] args) {
try {
// System.out.println(getPreWeekDate(6));
System.out.println(getIntevalDays("2005-01-01", "2005-01-03"));
} catch (Exception e) {
e.printStackTrace();
}
}
}