2013-10-27 48 views
0

的午夜秒我试图用这样的:的Java(乔达):从LocalDateTime

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

什么例外?你可以发布吗? – elyashiv

回答

7

如果你想知道一天的时间,在午夜以来秒,这将是最简单的只使用getMillisOfDay()

int secondsOfDay = localDateTime.getMillisOfDay()/1000; 

(使用DateTimeConstants.MILLIS_PER_SECOND如果你真的想 - 在这种情况下,我认为“千毫秒每秒”的知识很容易。)

当然,您可以使用相同的方法分钟和小时。

如果你真的想要它作为一个时期,你可以使用LocalDateTime.withMillisOfDay(0)在同一天的午夜获得LocalDateTime,例如,

secondsFromMidnight = Seconds.secondsBetween(localDateTime.withMillisOfDay(0), 
              localDateTime) 
          .getSeconds(); 

......但是我个人可能只是使用getMillisOfDay