Java将数据库返回的日期值拆分为单独的日期和时间字符串

Java将数据库返回的日期值拆分为单独的日期和时间字符串,java,sql,string,datetime,date,Java,Sql,String,Datetime,Date,我正在从Oracle数据库中读取日期列 列类型为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 = co

我正在从Oracle数据库中读取日期列

列类型为
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;
    }
}
请帮忙。谢谢你的帮助


谢谢

首先,我建议大家看看:它有很多简单的日期和时间功能。(比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日期时间,使用:

/**
 * 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”

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

请至少更改此功能:

公共静态字符串convertToTimeStamp(日历时间,布尔值 显示(秒)

关于:

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);
}

使用两个
SimpleDataFormat
对象,一个解析
Date
部分,另一个解析
Time
部分,您可以使用空格字符上的
String.split()
获得每个部分。

除了一些有问题的代码质量,您的主要问题是这些条件发生了逆转

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));

您在此处显示的代码当前存在什么问题?@MΓΓБПLL填充的返回日期和时间字符串为空。尽管列具有问题中指定的日期值。日期列格式不会更改。为什么不使用两个不同的
DateFormat
实例?一个用于日期,一个用于时间?甚至更好——考虑使用。我宁可修复我正在使用的,而不是在这个时候使用一个新的库。你能帮忙吗。非常感谢你的时间和回答。我现在不能使用乔达图书馆。如何使用标准Java api修改代码以实现我的目标。好的,我刚刚阅读了您对Joda DateTime的评论,我知道您不想尝试新的库。但请看我最后一次编辑:)谢谢。上一个方法中缺少新关键字。现在日期字符串呢。我的意思是时间应该没问题。我如何修改以获得仅日期部分?请回复。谢谢我的建议,在我的答案的最后使用了日期模式,但是我可以编辑它来给你这个功能(虽然没有测试)很抱歉,新的关键字,正如我说的,没有测试:在这里键入代码(不幸的是,stackoverflow编辑中没有java编辑模式:))非常感谢你指出了潜在的错误。固定的。再次谢谢你。
    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));