【问题标题】:How to combine date and time into a single object?如何将日期和时间组合成一个对象?
【发布时间】:2017-09-30 20:14:09
【问题描述】:

我的 dao 页面正在接收来自两个不同字段的日期和时间,现在我想知道如何将这些日期和时间合并到一个对象中,以便计算时差和总时间。我有这段代码要合并,但它不起作用我在这段代码中做错了什么,请帮忙。

    Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2013-01-02");
    Date t = new SimpleDateFormat("hh:mm:ss").parse("04:05:06");
    LocalDate datePart = new LocalDate(d);
    LocalTime timePart = new LocalTime(t);
    LocalDateTime dateTime = datePart.toLocalDateTime(timePart);
    System.out.println(dateTime);

【问题讨论】:

  • 您的t 实际上不是时间。这是一个约会。 1970 年 1 月 1 日凌晨 4:05。
  • @Boris the Spider:这并不能阻止您将其视为时间并提取时间部分,例如t.toInstant().atZone(ZoneId.systemDefault()).toLocalTime()。你必须处理这种模式,例如当你遇到java.sql.Time 实例时……

标签: java datetime java-8


【解决方案1】:

您只需要使用正确的方法,而不是调用构造函数。使用parse创建本地日期和本地时间对象,然后将这两个对象传递给LocalDateTimeof方法:

    LocalDate datePart = LocalDate.parse("2013-01-02");
    LocalTime timePart = LocalTime.parse("04:05:06");
    LocalDateTime dt = LocalDateTime.of(datePart, timePart);

编辑

显然,您需要组合两个 Date 对象而不是 2 个字符串。我想您可以先使用SimpleDateFormat 将两个日期转换为字符串。然后使用上面显示的方法。

String startingDate = new SimpleDateFormat("yyyy-MM-dd").format(startDate);
String startingTime = new SimpleDateFormat("hh:mm:ss").format(startTime);

【讨论】:

  • 完美展示了新的 DateTime API 的简单性。我可能会建议指出上面为什么会起作用 - 即 t 实际上是一个日期,并且在 Java 8 之前不支持“时间”。
  • 其抛出的错误不兼容类型字符串无法转换为LocalDate
  • 您确定您使用的是parseof 之类的方法,而不是直接将字符串分配给datePart? @deepakrawat
  • @deepak rawat:这个答案的开头展示了如何将 String 转换为 LocalDateLocalTime.
  • 需要注意的是,这需要 api 26 及更高版本
【解决方案2】:

要在 java 8 中组合日期和时间,您可以使用java.time.LocalDateTime。 这也允许您使用java.time.format.DateTimeFormatter 进行格式化。

示例程序:

public static void main(String[] args) {
        LocalDate date = LocalDate.of(2013, 1, 2);
        LocalTime time = LocalTime.of(4, 5, 6);
        LocalDateTime localDateTime = LocalDateTime.of(date, time);
        DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM d yyyy  hh:mm a");
        System.out.println(localDateTime.format(format));
    }

【讨论】:

  • 我在这里收到了警告。调用需要 API 级别 26(当前最小值为 15):java.time.LocalDate#of
【解决方案3】:

简单而有效的是:

LocalDateTime dateTime = LocalDateTime.of(datePart, timePart);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    相关资源
    最近更新 更多