我有一大堆日期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全部写进去吧? 比如日月与年之间的空格是不定数的,那就更头疼。有没有像正则表达式那样灵活的获取方法呢? 就是可以一个式子包括多种可能性的格式。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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 %                  
    敬礼!
      

  2.   

    http://blog.csdn.net/carefree31441这个没有什么好办法,要不你多写几个pattern,要不你就得把日期格式统一了!衡量下哪个方便就用哪个吧!
      

  3.   

    不会吧。。
    我的那些日期string来源是网上的一些文章。我总不能告诉全世界的人都统一格式吧 -____-
      

  4.   

    在程序上给点限制....或者用javaScript的时间插件,限制下
      

  5.   

    给你一个已经封装好的类,通过调用这个类中的方法,你可以获得你想要的日期格式...
    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;
    }
    }
      

  6.   

    /**
     * 判断给定字符串是否为特定格式时间(包括:时分秒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();
    }
    }
    }