1

我试着用这个:

secondsFromMidnight = Seconds.secondsBetween(localDateTime.toLocalDate(),    
    localDateTime).getSeconds();

但它会引发异常(参见下文)。我认为是一个很好的方法,但我还没有成功地将它适应我的情况。如果我写这个:

    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)
4

1 回答 1

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.

于 2013-10-27T19:26:23.897 回答