Java(Joda):来自LocalDateTime午夜的秒

时间:2013-10-27 19:18:04

标签: java time jodatime

我试着用这个:

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)

1 个答案:

答案 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