【问题标题】:Combine two type dates into one将两种类型的日期合二为一
【发布时间】:2017-01-19 22:55:27
【问题描述】:

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

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;

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

【问题讨论】:

标签: java date datetime time


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    现在您需要对日期和时间进行一些转换,您不妨将它们转换为 Java 8 日期和时间类之一——当然,前提是您可以使用 Java 8。这些类比老式的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
    

    根据您的要求,您可能更愿意使用ZonedDateTime 或其他Java 8 类型。这些类用途广泛,因此您很可能只需几行代码即可获得所需的内容。

    编辑:一些 JPA 实现可能直接支持 Java 8 日期和时间类,因此您可以省去前两行而只需要第三行。见JPA support for Java 8 new date and time API

    【讨论】:

      【解决方案3】:

      我知道您想从该字符串中解析日期(因为我不确定您所说的原始格式是什么意思)。

      所以也许这会有所帮助:

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

      【讨论】:

        猜你喜欢
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多