2011-12-12 19 views
0

我正在阅读Oracle DB中的日期列。Java分割日期从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; 
    } 
} 

请帮忙。您的帮助将不胜感激。

感谢

+0

什么是当前的问题与你在这里展示的代码? –

+0

@ M□□□БДLL填充的返回日期和时间字符串是空的。尽管该列具有问题中指定的日期值。日期列格式不会更改。 – Nomad

+0

为什么不使用两个不同的'DateFormat'实例 - 一个用于日期,一个用于时间?更好 - 考虑使用[乔达时间](http://joda-time.sourceforge.net/)。 –

回答

1

首先我会建议看看Joda-Time的:它有很多的随和的日期和时间函数。 (比java日期更容易)。

转换java.sql.Date到乔达日期时间我用:

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转换为乔达日期时间:所有的

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你的日期转换为你想要一个字符串?

敷贴到约达日期时间,使用:

/** 
* 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和时间格式化:

图案= “DD-MM-YYYY”(荷兰符号)或“YYYY-MM-DD”(英国标记)和时间格式=“hh:mm:ss”

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

请在leaste改变这一功能:

公共静态字符串convertToTimeStamp(日历时间,布尔 showSeconds)

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

非常感谢您的时间和答复。目前我无法使用joda库。我如何使用Standard Java API来修改我的代码来完成我想要的功能。 – Nomad

+0

好吧,我刚刚阅读了你对乔达日期时间的评论,我知道你不想尝试新的图书馆。但请看看我的最后编辑:) –

+0

谢谢。您在最后一种方法中缺少新的关键字。现在怎么样的日期字符串。我的意思是时间应该没问题。我将如何修改以获取日期部分?请回复。谢谢 – Nomad

0

使用两个SimpleDateFormat对象,一个解析Date部分和一个解析Time部分,你可以得到所有这些部分与String.split()的空格字符。

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

非常感谢引脚指出潜在的错误。固定。谢谢你。 – Nomad

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