繁体   English   中英

如何将java.sql.Date和java.sql.Time合并到java.util.Date?

[英]How to merge java.sql.Date and java.sql.Time to java.util.Date?

我有两个对象: java.sql.Datejava.sql.Time
将它们合并到单个java.util.Date的最佳方法是什么?

在数据库中,这些列是分开存储的。 我通过JDBC rs.getDate("Date")rs.getTime("Time");得到它们rs.getTime("Time");

您可以创建两个Calendar实例。 在第一个中初始化日期,在后者中初始化时间。 您可以从“时间”实例中提取时间值并将它们设置为“日期”。

  // Construct date and time objects
  Calendar dateCal = Calendar.getInstance();
  dateCal.setTime(date);
  Calendar timeCal = Calendar.getInstance();
  timeCal.setTime(time);

  // Extract the time of the "time" object to the "date"
  dateCal.set(Calendar.HOUR_OF_DAY, timeCal.get(Calendar.HOUR_OF_DAY));
  dateCal.set(Calendar.MINUTE, timeCal.get(Calendar.MINUTE));
  dateCal.set(Calendar.SECOND, timeCal.get(Calendar.SECOND));

  // Get the time value!
  date = dateCal.getTime();

两者都有时间和日期,所以你可以这样做:

Date d = new Date(2013, 11, 23);
Time t = new Time(23, 45, 45);
d.setMinutes(t.getMinutes());
d.setHours(t.getHours());
d.setSeconds(t.getSeconds());

istovatis的答案是正确的,除了没有超过毫秒。 我想提出现代的答案。 java.sql.Datejava.sql.Time现在已经过时了,它们的替换, LocalDateLocalTime类,使您的任务更加简单。 假设您使用的是Java 8或更高版本以及JDBC 4.2或更高版本,请从结果集中获取这些类型并将它们组合在一起:

    LocalDate date = rs.getObject("Date", LocalDate.class);
    LocalTime time = rs.getObject("Time", LocalTime.class);
    LocalDateTime dateTime = date.atTime(time);

如果您无法直接访问SQL结果集并从某些无法更改的旧API获取java.sql.Datejava.sql.Time ,我建议您转换为现代类型,然后使用相同的方式合并:

    LocalDate date = sqlDate.toLocalDate();
    LocalTime time = sqlTime.toLocalTime();

    LocalDateTime dateTime = date.atTime(time);

你问了一个java.util.Date 这个类也很久了,所以最好使用上面代码中的LocalDateTime (或者转换为ZonedDateTimeInstant ,具体取决于你将使用它的方式)。 如果您确实需要其他遗留API的Date ,您也无法更改,请按以下方式进行转换:

    Instant inst = dateTime.atZone(ZoneId.systemDefault()).toInstant();
    java.util.Date utilDate = java.util.Date.from(inst);

如果您的旧API需要Timestamp对象, Timestamp简单:

    Timestamp ts = Timestamp.valueOf(dateTime);

链接: Oracle教程:日期时间,解释如何使用java.time

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM