【问题标题】:Java Subtracting LocalDateTime foo from LocalDateTime Bar [duplicate]Java从LocalDateTime Bar中减去LocalDateTime foo [重复]
【发布时间】:2017-03-22 06:44:15
【问题描述】:

我知道这可能是一个非常愚蠢的问题,但是我想知道是否有办法从另一个减去本地日期时间,或者如果没有,将 localDateTime 转换为日期时间,然后从那里减去?

我需要能够计算出记录 foo 的开始和记录栏的开始(也是 Foo 的结束)之间的日期时间差

我对 java 比较陌生,为了简单起见,我希望能够将其保持在大致相同的布局中,而不必从秒等转换。

如果添加和减去 LocalDateTime 不是一个选项,我知道一旦我在 dateTime 中,我可以使用以下方法减去它们:

Period diff = new Period(start, end);

由于数据的目的,我需要保留日期和时间才能使其正常工作,并且如前所述,我希望保持相当简单,因此无需在秒之间转换回日期。

我的问题实际上只是将它以可接受的格式,正如我所说,我对 java 和面向对象作为一个整体相当陌生,所以请不要因为这个看似简单的问题而嘲笑我。

谢谢,

强尼

【问题讨论】:

  • 如果你的意思是这个问题是指 Joda-Time 类,那么你应该明确地说出来。此外,Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。

标签: java date datetime time casting


【解决方案1】:

这个问题是关于 Joda-Time,而不是关于 Java 8。这个问题并不是很清楚。无论如何,这个答案是关于 Java 8 的,因此不能直接回答这个问题。虽然我认为如果有人想改用 Java 8,这是一个合适的答案。

您可能应该检查java.time.Duration 类。

LocalDateTime from = ... ;
LocalDateTime to = ... ;
Duration duration = Duration.between(from, to);

如果你真的想获得Period,还是比较容易的:

LocalDateTime from = ... ;
LocalDateTime to = ... ;
Period period = Period.between(from.toLocalDate(), to.toLocalDate());

【讨论】:

  • OP明显用的是Joda-Time,不是Java-8-time-api,看Period-constructor的用法..
  • 谢谢,但是它一直返回 POD,这是由同一日期引起的吗,因为这只是 toLocalDate,而不是包含的时间?
  • @Jonnyr612 与 Joda-Time 或其他 API 相比,Java-8 (java.time-package) 不管理由日期和时间单位组成的持续时间。
  • @MenoHochschild 很明显?不。几个类名是相同的,没有joda-time 标签但经过更多审查,你是对的,问题不在于Java 8。
【解决方案2】:

为什么不直接使用LocalDateTime这种方式作为参数类型:

LocalDateTime start = new LocalDateTime(2016, 10, 4, 17, 45);
LocalDateTime end = LocalDateTime.now();
PeriodType ptype = PeriodType.yearMonthDayTime();
Period diff = new Period(start, end, ptype);

另请参阅API of Joda-Time。您无需转换为 DateTime

【讨论】:

    猜你喜欢
    • 2015-02-22
    • 2021-11-26
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2015-05-30
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多