2014-09-25 80 views
-1

我需要在天数中找到当前日期时间LocalDateTIme.now()与另一个LocaDateTime对象issueDateTime之间的差异。还有从issueDateTime开始计算的日子。也就是说,如果issueDateTime是2014年12月4日下午5:00,应按下午5点计算,而不是上午12点。我想在天内找到发行日期和当前日期之间的差异,然后将其乘以rentalTariff/day以返回方法amountPayable()的金额。谢谢天内两个LocalDateTIme对象之间的差异

public class RentOut { 

private int rentalTariff ; 
private LocalDateTime dateTime; 
private String rentedTo; 
private LocalDateTime returnDateTime; 

public RentOut(int rentalTariff) { 
    this.rentalTariff = rentalTariff; 
} 
public void RentIt(LocalDateTime dateTime, String rentedTo) { 
    this.dateTime = dateTime; 
    this.rentedTo = rentedTo; 
    this.returnDateTime = dateTime.plusHours(24); 
} 
public LocalDateTime getRentDateTime() { 
    return dateTime; 
} 
public LocalDateTime returnDateTime() { 
    return returnDateTime; 
} 
public String getCustomerName() { 
    return rentedTo; 
} 
public int amountPayable() { 
    //return LocalDateTime.now().minus(dateTime)*rentalTariff; 
} 
} 
+2

请显示一个简短而完整的例子证明了问题 - 只要一个带有两个LocalDateTime值的简单控制台应用程序,以及您目前如何解决该问题。 – 2014-09-25 10:51:36

+0

添加代码,看看。 – 2014-09-25 11:00:16

+1

这不是一个简短但完整的例子,是吗?它不包含任何样本数据,并且它有一堆不必要的位。在这种情况下,一个简短但完整的例子很可能是一个只包含大约三行代码的'main'方法的类... – 2014-09-25 11:23:37

回答

0

使用从LocalDateTime一年中的一天来计算这一点。考虑到如果年份存在差异,原始日期时间可能会在当前日期之后。 (这会导致负面结果)

+1

如果它可以跨越多年,那么每年的年度可能都不合适...有更简单的方法。 – 2014-09-25 11:24:03

+0

您确实可以使用Joda时间的Days类来计算两个日期之间的天数,如下所示:http://stackoverflow.com/questions/3299972/difference-in-days-between-two-dates-in-java? RQ = 1。 – 2014-09-25 11:37:01

+0

这里没有必要使用乔达时间。 'ChronoUnit.DAYS'是Java 8中广义的等价物。 – 2014-09-25 11:37:38

2

您可以使用ChronoUnit.DAYS。比较LocalTime值,看看一开始是否不应该被认为是在“第二天”:

import java.time.*; 
import java.time.temporal.*; 

class Test { 
    public static void main(String[] args) { 
     // Start time before end time 
     showDiff(2014, 9, 25, 15, 0, 
       2014, 9, 27, 17, 0); 
     // Start time equal to end time 
     showDiff(2014, 9, 25, 17, 0, 
       2014, 9, 27, 17, 0); 
     // Start time later than end time 
     showDiff(2014, 9, 25, 18, 0, 
       2014, 9, 27, 17, 0); 
    } 

    public static void showDiff(
     int startYear, int startMonth, int startDay, 
     int startHour, int startMinute, 
     int endYear, int endMonth, int endDay, 
     int endHour, int endMinute) { 
     LocalDateTime start = LocalDateTime.of(
      startYear, startMonth, startDay, startHour, startMinute); 
     LocalDateTime end = LocalDateTime.of(
      endYear, endMonth, endDay, endHour, endMinute); 

     System.out.printf("%s to %s is %d day(s)%n", start, end, 
      differenceInDays(start, end)); 
    } 

    public static int differenceInDays(LocalDateTime start, LocalDateTime end) { 
     LocalDate startDate = start.toLocalDate(); 
     LocalDate endDate = end.toLocalDate(); 
     if (start.toLocalTime().isAfter(end.toLocalTime())) { 
      startDate = startDate.plusDays(1); 
     } 
     return (int) ChronoUnit.DAYS.between(startDate, endDate); 
    } 
} 

输出:

2014-09-25T15:00 to 2014-09-27T17:00 is 2 day(s) 
2014-09-25T17:00 to 2014-09-27T17:00 is 2 day(s) 
2014-09-25T18:00 to 2014-09-27T17:00 is 1 day(s)