我从数据库中获得了两个类型日期:
Date : 2017-01-28 || Time : 12:59
我希望将它合并为一个Date
变量。
这是两个变量的起源:
@Temporal(value = TemporalType.DATE)
@Future
@DateTimeFormat(pattern = "dd/MM/YY")
@Column(name = "dateDebut", nullable = true)
private Date date;
@Temporal(TemporalType.TIME)
@Column(name="Start_Hour")
private Date startHour;
任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
使用Calendar
对象:
private static Date combine(Date date, Date time) {
Calendar cal = Calendar.getInstance();
cal.setTime(time);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, min);
return cal.getTime();
}
测试
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2017-01-28");
Date startHour = new SimpleDateFormat("HH:mm").parse("12:59");
System.out.println(combine(date, startHour));
输出
Sat Jan 28 12:59:00 EST 2017
答案 1 :(得分:2)
现在您需要对日期和时间进行一些转换,您可以将它们转换为Java 8日期和时间类之一 - 当然,前提是您可以使用Java 8。对于下游而言,这些类比旧式http://cars.example.com/bmw/%20HTTP/1.0?aid=123
类更好。它比其他答案更直接。例如:
Date
打印:
LocalDate d = date.toInstant().atZone(ZoneOffset.systemDefault()).toLocalDate();
LocalTime t = startHour.toInstant().atZone(ZoneOffset.systemDefault()).toLocalTime();
LocalDateTime dt = d.atTime(t);
System.out.println(dt);
根据您的要求,您可能希望使用2017-01-28T12:29
或其他Java 8类型。这些课程非常通用,因此您可以通过几行代码获得所需的内容。
编辑:一些JPA实现可能直接支持Java 8日期和时间类,因此您可以省去前两行,只需要第三行。请参阅JPA support for Java 8 new date and time API。
答案 2 :(得分:0)
我想到你想要解析该字符串中的日期(因为我不确定你的原始格式是什么意思)。
所以这可能会有所帮助:
private static final String STRING_TO_FORMAT = "Date : 2017-01-28 || Time : 12:59";
public static void main(String[] args) {
Matcher matcher = Pattern.compile(".*(\\d{4}-\\d{2}-\\d{2}).*(\\d{2}:\\d{2})").matcher(STRING_TO_FORMAT);
matcher.find();
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(matcher.group(1) + " " + matcher.group(2));
System.out.println(date);
} catch (ParseException e) {
}
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy HH:mm");
System.out.println(formatter.format(date));
}