Java分割日期值从DB返回到单独的日期和时间字符串

时间:2011-12-12 19:13:03

标签: java sql string datetime date

我正在从Oracle DB中读取日期列。

列类型为Date

示例日期数据为:2011-12-06 14:28:12

现在,当我读这个日期时,我想将日期部分拆分为另一个字符串和时间部分。

//这是我正在使用的代码。

DateFormat df = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss"); 

// some loop.
    SomeBean bean =  new SomeBean();
    Date date  = convertTimestamp(rs.getTimestamp("DATE_VAL"));
    bean.setTime(date==null?"":convertToTimeStamp(date,true));
    bean.setDate(date==null?"": df.format(date));           
// end some loop.

private java.util.Date convertTimestamp(java.sql.Timestamp timestamp) {
    if (timestamp == null)
        return null;
    else
        return new java.util.Date(timestamp.getTime());
}

private  String convertToTimeStamp(Date date, boolean showSeconds) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return convertToTimeStamp(c, showSeconds);
}   

public static String convertToTimeStamp(Calendar time, boolean showSeconds) {
    String hours = Integer.toString(time.get(Calendar.HOUR_OF_DAY));
    if (hours.length() == 1) {
        hours = '0' + hours;
    }
    String minutes = Integer.toString(time.get(Calendar.MINUTE));
    if (minutes.length() == 1) {
        minutes = '0' + minutes;
    }
    if (showSeconds) {
        String seconds = Integer.toString(time.get(Calendar.SECOND));
        if (seconds.length() == 1) {
            seconds = '0' + seconds;
        }
        return hours + ":" + minutes + ":" + seconds;
    } else {
        return hours + ":" + minutes;
    }
}

请帮忙。我们将非常感谢您的帮助。

由于

4 个答案:

答案 0 :(得分:1)

首先,我建议您查看Joda-Time:它有很多简单的日期和时间功能。 (比java日期容易得多)。

将java.sql.Date转换为joda DateTime我使用:

public static DateTime convertSqlDateToDateTime(java.sql.Date sqlDate){
    Calendar c = Calendar.getInstance();
    c.setTime(sqlDate);
    //note: java months are between 0 and 11:
    DateTime dt=new DateTime(c.get(Calendar.YEAR),c.get(Calendar.MONTH)+1,c.get(Calendar.DAY_OF_MONTH),c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),c.get(Calendar.SECOND),c.get(Calendar.MILLISECOND));
    return dt;
}

这至少会为您节省一个功能,并且可能会帮助您解决问题。

将java.sql.TimeStamp转换为joda DateTime:

public static DateTime convertSqlTimeStampToDateTime(java.sql.Timestamp sqlTimestamp){
    Calendar c = Calendar.getInstance();
    c.setTime(sqlTimestamp);
    //note: java months are between 0 and 11:
    DateTime dt=new DateTime(c.get(Calendar.YEAR),c.get(Calendar.MONTH)+1,c.get(Calendar.DAY_OF_MONTH),c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),c.get(Calendar.SECOND),c.get(Calendar.MILLISECOND));
    return dt;
}

其次,为什么不使用DateFormatter将日期转换为您想要的字符串?

坚持Joda DateTime,使用:

/**
 * Converts a DateTime to a string using the given pattern (format)
 * @param dateTime
 * @param pattern
 * @return
 */
public static String convertDateTimeToPattern(DateTime dateTime,String pattern){
    DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
    return dateTime.toString(fmt);
}

U可以使用与java.Date和Time格式化程序相同的格式:

pattern =“DD-MM-YYYY”(荷兰符号)或“YYYY-MM-DD”(英文符号)和时间模式=“hh:mm:ss”

如果你想坚持你的方法,创建另一个SimpleDateFormat,并使用这最后一个模式(“hh:mm:ss”)来创建一个时间字符串。

请更改此功能:

  

public static String convertToTimeStamp(Calendar time,boolean   showSeconds)

in to:

public static String convertToTimeStamp(Date date, boolean showSeconds) {
    String pattern = "hh:mm:ss";
    if (!showSeconds) {
        pattern = "hh:mm";
    }
    DateFormat df = new SimpleDateFormat(pattern);
    return df.format(date);
}

在你的上一次评论中,我猜你要求:

public static String convertToDateString(Date date) {
    String pattern = "YYYY-MM-DD"; 
    //(or another date format, like in dutch: "DD-MM-YYY"
    DateFormat df = new SimpleDateFormat(pattern);
    return df.format(date);
}

答案 1 :(得分:1)

除了一些有问题的代码质量外,您的主要问题是这些条件颠倒

bean.setTime(date!=null?"":convertToTimeStamp(date,true));                       
bean.setDate(date!=null?"": df.format(date));

应替换为:

bean.setTime(date==null?"":convertToTimeStamp(date,true));                       
bean.setDate(date==null?"": df.format(date));

答案 2 :(得分:0)

使用两个SimpleDateFormat个对象,一个解析Date部分,另一个解析Time部分,您可以在SPACE上使用String.split()获取每个部分字符。

答案 3 :(得分:0)

    DateFormat formatDate = new SimpleDateFormat("yyyy-MM-DD");
    DateFormat formatTime = new SimpleDateFormat("HH:mm:ss");
    Date now = new Date();

    System.out.println("dateOnly: " + formatDate.format(now));
    System.out.println("timeOnly: " + formatTime.format(now));