2016-11-08 93 views
2

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

我需要能够制定出日期时间差,记录foo的开始和记录栏的开始(这也是富月底)

我是相当新的Java之间的,和为了简单起见,我希望能够保持它大致相同的布局,而不是必须从秒转换等。

如果加入和减去LocalDateTime不是一个选项,我知道一旦我在dateTime I我能够减去他们使用:

Period diff = new Period(start, end); 

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

我的问题实际上只是以一种可以接受的格式得到它,正如我所说的,我对Java和面向对象的整体而言是新手,所以请不要嘲笑我这个看似简单的问题。

感谢,

强尼

+1

已经回答已经在这里http://stackoverflow.com/questions/25747499/java-8-calculate-difference-between-two-localdatetime – JynXXedRabbitFoot

+0

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

回答

3

你为什么不干脆直接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

4

的问题是关于乔达时间,而不是关于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()); 
+0

OP显然使用Joda-Time,而不是Java-8-time-api,请参阅Period-constructor的使用.. –

+0

谢谢,但是它一直返回POD,这是由于相同的日期造成的,因为这只是给LocalDate,而不是包含的时间? – Jonnyr612

+0

@ Jonnyr612与Joda-Time或其他API相比,Java-8(java.time-package)不会管理由日期和时间单位组成的持续时间。 –