我正在从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;
}
}
请帮忙。我们将非常感谢您的帮助。
由于
答案 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));