我试着用这个:
secondsFromMidnight = Seconds.secondsBetween(localDateTime.toLocalDate(),
localDateTime).getSeconds();
但它会引发异常(参见下文)。我认为this是一种很好的方法,但我还没有成功地适应我的情况。如果我写这个:
DateTime dateTimeFromMidnight = new DateMidnight(localDateTime.getChronology()).toDateTime();
Duration duration = new Duration(dateTimeFromMidnight, localDateTime.toDateTime());
它与时区混淆(我少了1小时)。
如果你的解决方案也很容易适应几小时,几分钟等,那就更好了。
我绝对需要使用LocalDateTime作为输入类型,请不要在其他类中发布解决方案。
Exception in thread "main" java.lang.IllegalArgumentException: ReadablePartial objects must have the same set of fields
at org.joda.time.base.BaseSingleFieldPeriod.between(BaseSingleFieldPeriod.java:92)
at org.joda.time.Seconds.secondsBetween(Seconds.java:124)
答案 0 :(得分:8)
如果您想知道一天中的时间(以午夜为单位),最简单的方法是使用getMillisOfDay()
:
int secondsOfDay = localDateTime.getMillisOfDay() / 1000;
(如果你真的想使用DateTimeConstants.MILLIS_PER_SECOND
- 在这种情况下我认为“每秒1000毫秒”的知识就足够了。)
当然,你可以在几分钟和几小时内使用相同的方法。
如果你真的希望它作为句号,你可以使用LocalDateTime.withMillisOfDay(0)
在同一天的午夜获得LocalDateTime
,例如
secondsFromMidnight = Seconds.secondsBetween(localDateTime.withMillisOfDay(0),
localDateTime)
.getSeconds();
...但我个人可能只是使用getMillisOfDay
。