下面列出了java.time.Period#between ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
public void difference_between_two_dates_java8_period() {
LocalDate sinceGraduation = LocalDate.of(1984, Month.JUNE, 4);
LocalDate currentDate = LocalDate.now();
Period betweenDates = Period.between(sinceGraduation, currentDate);
int diffInDays = betweenDates.getDays();
int diffInMonths = betweenDates.getMonths();
int diffInYears = betweenDates.getYears();
logger.info(diffInDays);
logger.info(diffInMonths);
logger.info(diffInYears);
assertTrue(diffInDays >= anyInt());
assertTrue(diffInMonths >= anyInt());
assertTrue(diffInYears >= anyInt());
}
@Test
public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() {
LocalDate now = LocalDate.now();
LocalDate sixDaysBehind = now.minusDays(6);
Period period = Period.between(now, sixDaysBehind);
int diff = Math.abs(period.getDays());
assertEquals(diff, 6);
}
@Test
public void test2() {
Period tenDays = Period.between(LocalDate.of(2014, 3, 8), LocalDate.of(2014, 3, 18));
// Duration和Period类都提供了很多非常方便的工厂类,直接创建对应的实例:
Duration threeMinutes = Duration.ofMinutes(3);
threeMinutes = Duration.of(3, ChronoUnit.MINUTES);
tenDays = Period.ofDays(10);
Period threeWeeks = Period.ofWeeks(3);
Period twoYearsSixMonthsOneDay = Period.of(2, 6, 1);
}
@Test(dataProvider="between")
public void factory_between_LocalDate(int y1, int m1, int d1, int y2, int m2, int d2, int ye, int me, int de) {
LocalDate start = LocalDate.of(y1, m1, d1);
LocalDate end = LocalDate.of(y2, m2, d2);
Period test = Period.between(start, end);
assertPeriod(test, ye, me, de);
//assertEquals(start.plus(test), end);
}
@Test(dataProvider="between")
public void factory_between_LocalDate(int y1, int m1, int d1, int y2, int m2, int d2, int ye, int me, int de) {
LocalDate start = LocalDate.of(y1, m1, d1);
LocalDate end = LocalDate.of(y2, m2, d2);
Period test = Period.between(start, end);
assertPeriod(test, ye, me, de);
//assertEquals(start.plus(test), end);
}
@Test(dataProvider="between")
public void factory_between_LocalDate(int y1, int m1, int d1, int y2, int m2, int d2, int ye, int me, int de) {
LocalDate start = LocalDate.of(y1, m1, d1);
LocalDate end = LocalDate.of(y2, m2, d2);
Period test = Period.between(start, end);
assertPeriod(test, ye, me, de);
//assertEquals(start.plus(test), end);
}
@Test(dataProvider="between")
public void factory_between_LocalDate(int y1, int m1, int d1, int y2, int m2, int d2, int ye, int me, int de) {
LocalDate start = LocalDate.of(y1, m1, d1);
LocalDate end = LocalDate.of(y2, m2, d2);
Period test = Period.between(start, end);
assertPeriod(test, ye, me, de);
//assertEquals(start.plus(test), end);
}
@Override
public TemporalAmount dateSubtract(LocalDate first, LocalDate second) {
if (first == null || second == null) {
return null;
}
try {
return Period.between(first, second);
} catch (Exception e) {
String message = String.format("dateSubtract(%s, %s)", first, second);
logError(message, e);
return null;
}
}
private Duration toYearsMonthDuration(DatatypeFactory datatypeFactory, LocalDate date1, LocalDate date2) {
Period between = Period.between(date2, date1);
int years = between.getYears();
int months = between.getMonths();
if (between.isNegative()) {
years = - years;
months = - months;
}
return datatypeFactory.newDurationYearMonth(!between.isNegative(), years, months);
}
public static void main(String[] args) {
LocalDate dateA = LocalDate.of(1978, 8, 26);
LocalDate dateB = LocalDate.of(1988, 9, 28);
Period period = Period.between(dateA, dateB);
System.out.printf("Between %s and %s" + " there are %d years, %d months" + " and %d days%n", dateA, dateB,
period.getYears(), period.getMonths(), period.getDays());
}
public static String formatDuration(LocalDate date) {
Period period = Period.between(date, LocalDate.now());
return UserUIContext.getMessage(DayI18nEnum.DURATION, period.getDays());
}
Period getDifferenceBetweenDates(LocalDate localDate1, LocalDate localDate2) {
return Period.between(localDate1, localDate2);
}
@Test(expectedExceptions=NullPointerException.class)
public void factory_between_LocalDate_nullFirst() {
Period.between((LocalDate) null, LocalDate.of(2010, 1, 1));
}
@Override
protected void computeRealHumanResourceCost(
OperationOrder operationOrder,
int priority,
int bomLevel,
CostSheetLine parentCostSheetLine,
LocalDate previousCostSheetDate)
throws AxelorException {
AppProductionService appProductionService = Beans.get(AppProductionService.class);
if (!appProductionService.isApp("production")
|| !appProductionService.getAppProduction().getManageBusinessProduction()) {
super.computeRealHumanResourceCost(
operationOrder, priority, bomLevel, parentCostSheetLine, previousCostSheetDate);
return;
}
if (operationOrder.getTimesheetLineList() != null) {
Long duration = 0L;
if (parentCostSheetLine.getCostSheet().getCalculationTypeSelect()
== CostSheetRepository.CALCULATION_END_OF_PRODUCTION
|| parentCostSheetLine.getCostSheet().getCalculationTypeSelect()
== CostSheetRepository.CALCULATION_PARTIAL_END_OF_PRODUCTION) {
Period period =
previousCostSheetDate != null
? Period.between(
parentCostSheetLine.getCostSheet().getCalculationDate(), previousCostSheetDate)
: null;
duration =
period != null ? Long.valueOf(period.getDays() * 24) : operationOrder.getRealDuration();
} else if (parentCostSheetLine.getCostSheet().getCalculationTypeSelect()
== CostSheetRepository.CALCULATION_WORK_IN_PROGRESS) {
duration =
operationOrder.getRealDuration()
- (operationOrder.getPlannedDuration()
* costSheet.getManufOrderProducedRatio().longValue());
}
// TODO get the timesheet Line done when we run the calculation.
this.computeRealHumanResourceCost(
null, operationOrder.getWorkCenter(), priority, bomLevel, parentCostSheetLine, duration);
}
}
protected void computeRealHumanResourceCost(
OperationOrder operationOrder,
int priority,
int bomLevel,
CostSheetLine parentCostSheetLine,
LocalDate previousCostSheetDate)
throws AxelorException {
if (operationOrder.getProdHumanResourceList() != null) {
Long duration = 0L;
if (parentCostSheetLine.getCostSheet().getCalculationTypeSelect()
== CostSheetRepository.CALCULATION_END_OF_PRODUCTION
|| parentCostSheetLine.getCostSheet().getCalculationTypeSelect()
== CostSheetRepository.CALCULATION_PARTIAL_END_OF_PRODUCTION) {
Period period =
previousCostSheetDate != null
? Period.between(
parentCostSheetLine.getCostSheet().getCalculationDate(), previousCostSheetDate)
: null;
duration =
period != null ? Long.valueOf(period.getDays() * 24) : operationOrder.getRealDuration();
} else if (parentCostSheetLine.getCostSheet().getCalculationTypeSelect()
== CostSheetRepository.CALCULATION_WORK_IN_PROGRESS) {
BigDecimal ratio = costSheet.getManufOrderProducedRatio();
Long plannedDuration =
DurationTool.getSecondsDuration(
Duration.between(
operationOrder.getPlannedStartDateT(), operationOrder.getPlannedEndDateT()))
* ratio.longValue();
Long totalPlannedDuration = 0L;
for (OperationOrder manufOperationOrder :
operationOrder.getManufOrder().getOperationOrderList()) {
if (manufOperationOrder.getId() == operationOrder.getId()) {
totalPlannedDuration += manufOperationOrder.getPlannedDuration();
}
}
duration = Math.abs(totalPlannedDuration - plannedDuration);
}
for (ProdHumanResource prodHumanResource : operationOrder.getProdHumanResourceList()) {
this.computeRealHumanResourceCost(
prodHumanResource,
operationOrder.getWorkCenter(),
priority,
bomLevel,
parentCostSheetLine,
duration);
}
}
}
@Test(expectedExceptions=NullPointerException.class)
public void factory_between_LocalDate_nullSecond() {
Period.between(LocalDate.of(2010, 1, 1), (LocalDate) null);
}
public int getAge(Person person){
Period p = Period.between(person.getDateOfBirth(), LocalDate.now());
return p.getYears();
}
@Test(expectedExceptions=NullPointerException.class)
public void factory_between_LocalDate_nullSecond() {
Period.between(LocalDate.of(2010, 1, 1), (LocalDate) null);
}
/**
* Returns a {@link java.time.Period} of time between the first day of this year/month (inclusive) and the
* given {@link java.time.YearMonth} (exclusive).
*
* @param self a YearMonth
* @param other another YearMonth
* @return a Period
* @since 2.5.0
*/
public static Period rightShift(YearMonth self, YearMonth other) {
return Period.between(self.atDay(1), other.atDay(1));
}
/**
* Returns a {@link java.time.Period} between the first day of this year (inclusive) and the first day of the
* provided {@link java.time.Year} (exclusive).
*
* @param self a Year
* @param year another Year
* @return a Period between the Years
* @since 2.5.0
*/
public static Period rightShift(final Year self, Year year) {
return Period.between(self.atDay(1), year.atDay(1));
}