将两种类型的日期合并为一种

时间:2017-01-19 22:55:28

标签: java date datetime time

我从数据库中获得了两个类型日期:

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;

任何帮助将不胜感激。谢谢。

3 个答案:

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