List of usage examples for org.joda.time Duration Duration
public Duration(ReadableInstant start, ReadableInstant end)
From source file:org.jbpm.process.core.timer.DateTimeUtils.java
License:Apache License
public static long[] parseRepeatableDateTime(String dateTimeStr) { long[] result = new long[3]; if (isRepeatable(dateTimeStr)) { String[] parsed = parseISORepeatable(dateTimeStr); String repeats = parsed[0]; String delayIn = parsed[1]; String periodIn = parsed[2]; DateTime startAtDelay = ISODateTimeFormat.dateTimeParser().parseDateTime(delayIn); Duration startAtDelayDur = new Duration(System.currentTimeMillis(), startAtDelay.getMillis()); if (startAtDelayDur.getMillis() <= 0) { // need to introduce delay to allow all initialization startAtDelayDur = Duration.standardSeconds(1); }/*w w w . j ava2 s .com*/ Period period = ISOPeriodFormat.standard().parsePeriod(periodIn); result[0] = Long.parseLong(repeats.length() == 0 ? "-1" : repeats); result[1] = startAtDelayDur.getMillis(); result[2] = period.toStandardDuration().getMillis(); return result; } else { int index = dateTimeStr.indexOf("###"); if (index != -1) { String period = dateTimeStr.substring(index + 3); String delay = dateTimeStr.substring(0, index); result = new long[] { TimeUtils.parseTimeString(delay), TimeUtils.parseTimeString(period) }; return result; } result = new long[] { TimeUtils.parseTimeString(dateTimeStr) }; return result; } }
From source file:org.jgrasstools.hortonmachine.modules.hydrogeomorphology.peakflow.core.discharge.QReal.java
License:Open Source License
/** * Calculate the discharge with rainfall data. *//* w ww. ja v a 2 s . c om*/ // public QReal( ParameterBox fixedParameters, double[][] iuhdata, double[][] jeffdata ) { // fixedParams = fixedParameters; // // jeff = jeffdata; // ampi = iuhdata; // // System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAA: ampilength " + ampi[ampi.length - 1][0]); // } /* * (non-Javadoc) * @see bsh.commands.h.peakflow.core.discharge.DischargeCalculator#calculateQ() */ public double[][] calculateQ() { double timestep = fixedParams.getTimestep(); double area_super = fixedParams.getArea(); double area_sub = fixedParams.getArea_sub(); double area_tot = 0f; double raintimestep = jeffC.getRain_timestep(); DateTime firstDate = jeffC.getFirstDate(); /* * The maximum rain time has no sense with the real precipitations. In this case it will use * the rain timestep for tp. */ double tcorr = ampi[ampi.length - 1][0]; tpmax = (double) raintimestep; int rainLength = jeff.size(); double[][] totalQshiftMatrix = new double[rainLength][(int) (Math.floor((tcorr + tpmax) / timestep) + 1 + rainLength * raintimestep / timestep)]; double[][] Q = new double[(int) Math.floor((tcorr + tpmax) / timestep) + 1][3]; if (area_sub != -9999.0) { area_tot = area_sub + area_super; } else { area_tot = area_super; } Set<DateTime> dates = jeff.keySet(); pm.beginTask("Calculating discharge...", dates.size()); int i = 0; for (DateTime dateTime : dates) { double J = jeff.get(dateTime); /* * calculate the discharge for t < tcorr */ int j = 0; for (int t = 1; t < tcorr; t += timestep) { j = (int) Math.floor((t) / timestep); if (t <= tpmax) { Q[j][0] = t; double widthInterpolate = ModelsEngine.width_interpolate(ampi, t, 0, 2); Q[j][1] = (double) (J * area_tot * widthInterpolate); Q[j][2] = Q[j - 1][2] + Q[j][1]; } else { Q[j][0] = t; Q[j][1] = (double) (J * area_tot * (ModelsEngine.width_interpolate(ampi, t, 0, 2) - ModelsEngine.width_interpolate(ampi, t - tpmax, 0, 2))); Q[j][2] = Q[j - 1][2] + Q[j][1]; } } /* * calculate the discharge for t > tcorr */ for (double t = tcorr; t < (tcorr + tpmax); t += timestep) { j = (int) Math.floor(((int) t) / timestep); Q[j][0] = t; Q[j][1] = (double) (J * area_tot * (ampi[ampi.length - 1][2] - ModelsEngine.width_interpolate(ampi, t - tpmax, 0, 2))); Q[j][2] = Q[j - 1][2] + Q[j][1]; } /* * calculate the volumes */ // double vol = Q[Q.length - 2][2] * timestep; // double vol2 = (double) (area_tot * J * raintimestep); /* * calculate zero padding before first value Note that jeff contains already the * progressive time of the rainfile. */ int totalshiftmatrixindex = 0; int initalshiftmatrixindex = 0; // FIXME time in ??? Duration duration = new Duration(firstDate, dateTime); long intervalSeconds = duration.getStandardSeconds(); int paddingnumber = (int) (intervalSeconds / timestep); for (int m = 0; m < paddingnumber; m++) { totalQshiftMatrix[i][m] = 0; totalshiftmatrixindex++; } initalshiftmatrixindex = totalshiftmatrixindex; for (int k = initalshiftmatrixindex; k < Q.length + initalshiftmatrixindex; k++) { totalQshiftMatrix[i][k] = Q[k - initalshiftmatrixindex][1]; totalshiftmatrixindex++; } for (int k = Q.length + totalshiftmatrixindex; k < totalQshiftMatrix[0].length; k++) { totalQshiftMatrix[i][k] = 0; } i++; pm.worked(1); } pm.done(); /* * sum the discharge contributes */ Qtot = new double[totalQshiftMatrix[0].length][2]; double tottime = 0f; for (int k = 0; k < Qtot.length; k++) { double sum = 0f; for (int j = 0; j < totalQshiftMatrix.length; j++) { sum = sum + totalQshiftMatrix[j][k]; } tottime = tottime + timestep; Qtot[k][1] = sum; Qtot[k][0] = tottime; } double total_vol = 0f; for (int k = 0; k < Qtot.length; k++) { total_vol = total_vol + Qtot[k][1]; } double total_rain = 0.0; for (DateTime dateTime : dates) { double J = jeff.get(dateTime); total_rain = total_rain + J; } total_rain = total_rain * area_tot * raintimestep; return Qtot; }
From source file:org.kalypso.ui.rrm.internal.timeseries.view.imports.ValidateTimestepsVisitor.java
License:Open Source License
@Override public void visit(final IObservationValueContainer container) throws SensorException { final IAxis dateAxis = AxisUtils.findDateAxis(container.getAxes()); final Date date = (Date) container.get(dateAxis); if (Objects.isNotNull(m_lastDate)) { final Duration duration = new Duration(m_lastDate.getTime(), date.getTime()); if (!m_duration.equals(duration)) { /** take time zone from source file for displaying (so it's equivalent to source date times!) */ final SimpleDateFormat sdf = new SimpleDateFormat(Messages.getString("ValidateTimestepsVisitor_0")); //$NON-NLS-1$ final TimeZone timeZoneID = MetadataHelper.getTimeZone(container.getMetaData(), KalypsoCorePlugin.getDefault().getTimeZone().getID()); sdf.setTimeZone(timeZoneID); m_status.add(IStatus.WARNING, String.format(Messages.getString("ValidateTimestepsVisitor_1"), //$NON-NLS-1$ sdf.format(m_lastDate), sdf.format(date))); }/* w w w .j a v a 2 s . c om*/ } m_lastDate = date; }
From source file:org.kuali.kpme.tklm.time.rules.shiftdifferential.service.ShiftDifferentialRuleServiceImpl.java
License:Educational Community License
@Override public void processShiftDifferentialRules(TimesheetDocument timesheetDocument, TkTimeBlockAggregate aggregate) { DateTimeZone zone = HrServiceLocator.getTimezoneService().getUserTimezoneWithFallback(); List<List<TimeBlock>> blockDays = aggregate.getDayTimeBlockList(); DateTime periodStartDateTime = timesheetDocument.getCalendarEntry().getBeginPeriodLocalDateTime() .toDateTime(zone);//from ww w . j ava2 s .com Map<Long, Set<ShiftDifferentialRule>> jobNumberToShifts = getJobNumberToShiftRuleMap(timesheetDocument); // If there are no shift differential rules, we have an early exit. if (jobNumberToShifts.isEmpty()) { return; } // Get the last day of the previous pay period. We need this to determine // if there are hours from the previous pay period that will effect the // shift rule on the first day of the currently-being-processed pay period. // // Will be set to null if not applicable. boolean previousPayPeriodPrevDay = true; Map<Long, List<TimeBlock>> jobNumberToTimeBlocksPreviousDay = getPreviousPayPeriodLastDayJobToTimeBlockMap( timesheetDocument, jobNumberToShifts); // We are going to look at the time blocks grouped by Days. // // This is a very large outer loop. for (int pos = 0; pos < blockDays.size(); pos++) { List<TimeBlock> blocks = blockDays.get(pos); // Timeblocks for this day. if (blocks.isEmpty()) continue; // No Time blocks, no worries. DateTime currentDay = periodStartDateTime.plusDays(pos); Interval virtualDay = new Interval(currentDay, currentDay.plusHours(24)); // Builds our JobNumber to TimeBlock for Current Day List. // // Shift Differential Rules are also grouped by Job number, this // provides a quick way to do the lookup / reference. // We don't need every time block, only the ones that will be // applicable to the shift rules. Map<Long, List<TimeBlock>> jobNumberToTimeBlocks = new HashMap<Long, List<TimeBlock>>(); for (TimeBlock block : blocks) { Long jobNumber = block.getJobNumber(); if (jobNumberToShifts.containsKey(jobNumber)) { List<TimeBlock> jblist = jobNumberToTimeBlocks.get(jobNumber); if (jblist == null) { jblist = new ArrayList<TimeBlock>(); jobNumberToTimeBlocks.put(jobNumber, jblist); } jblist.add(block); } } // Large Outer Loop to look at applying the Shift Rules based on // the current JobNumber. // // This loop will handle previous day boundary time as well as the // current day. // // There is room for refactoring here! for (Map.Entry<Long, Set<ShiftDifferentialRule>> entry : jobNumberToShifts.entrySet()) { Set<ShiftDifferentialRule> shiftDifferentialRules = entry.getValue(); // Obtain and sort our previous and current time blocks. List<TimeBlock> ruleTimeBlocksPrev = null; List<TimeBlock> ruleTimeBlocksCurr = jobNumberToTimeBlocks.get(entry.getKey()); if (ruleTimeBlocksCurr != null && ruleTimeBlocksCurr.size() > 0) { if (jobNumberToTimeBlocksPreviousDay != null) ruleTimeBlocksPrev = jobNumberToTimeBlocksPreviousDay.get(entry.getKey()); if (ruleTimeBlocksPrev != null && ruleTimeBlocksPrev.size() > 0) this.sortTimeBlocksInverse(ruleTimeBlocksPrev); this.sortTimeBlocksNatural(ruleTimeBlocksCurr); } else { // Skip to next job, there is nothing for this job // on this day, and because of this we don't care // about the previous day either. continue; } for (ShiftDifferentialRule rule : shiftDifferentialRules) { Set<String> fromEarnGroup = HrServiceLocator.getEarnCodeGroupService() .getEarnCodeListForEarnCodeGroup(rule.getFromEarnGroup(), timesheetDocument .getCalendarEntry().getBeginPeriodFullDateTime().toLocalDate()); LocalTime ruleStart = new LocalTime(rule.getBeginTime(), zone); LocalTime ruleEnd = new LocalTime(rule.getEndTime(), zone); DateTime shiftEnd = ruleEnd.toDateTime(currentDay); DateTime shiftStart = ruleStart.toDateTime(currentDay); if (shiftEnd.isBefore(shiftStart) || shiftEnd.isEqual(shiftStart)) { shiftEnd = shiftEnd.plusDays(1); } Interval shiftInterval = new Interval(shiftStart, shiftEnd); // Set up buckets to handle previous days time accumulations BigDecimal hoursBeforeVirtualDay = BigDecimal.ZERO; // Check current day first block to see if start time gap from virtual day start is greater than max gap // if so, we can skip the previous day checks. TimeBlock firstBlockOfCurrentDay = null; for (TimeBlock b : ruleTimeBlocksCurr) { if (timeBlockHasEarnCode(fromEarnGroup, b)) { firstBlockOfCurrentDay = b; break; } } // Previous Day :: We have prior block container of nonzero size, and the previous day is active. Interval previousDayShiftInterval = new Interval(shiftStart.minusDays(1), shiftEnd.minusDays(1)); // Blank initialization pointer for picking which interval to pass to applyPremium() Interval evalInterval = null; if (ruleTimeBlocksPrev != null && ruleTimeBlocksPrev.size() > 0 && dayIsRuleActive(currentDay.minusDays(1), rule)) { // Simple heuristic to see if we even need to worry about // the Shift rule for this set of data. if (shiftEnd.isAfter(virtualDay.getEnd())) { // Compare first block of previous day with first block of current day for max gaptitude. TimeBlock firstBlockOfPreviousDay = null; for (TimeBlock b : ruleTimeBlocksPrev) { if (timeBlockHasEarnCode(fromEarnGroup, b)) { firstBlockOfPreviousDay = b; break; } } // Only if we actually have at least one block. // Adding Assumption: We must have both a valid current and previous block. Max Gap can not be more than a virtual day. // If this assumption does not hold, additional logic will be needed to iteratively go back in time to figure out which // blocks are valid. if ((firstBlockOfPreviousDay != null) && (firstBlockOfCurrentDay != null)) { Interval previousBlockInterval = new Interval( firstBlockOfPreviousDay.getEndDateTime().withZone(zone), firstBlockOfCurrentDay.getBeginDateTime().withZone(zone)); Duration blockGapDuration = previousBlockInterval.toDuration(); BigDecimal bgdHours = TKUtils.convertMillisToHours(blockGapDuration.getMillis()); // if maxGap is 0, ignore gaps and assign shift to time blocks within the hours if (rule.getMaxGap().compareTo(BigDecimal.ZERO) == 0 || bgdHours.compareTo(rule.getMaxGap()) <= 0) { // If we are here, we know we have at least one valid time block to pull some hours forward from. // These are inversely sorted. for (int i = 0; i < ruleTimeBlocksPrev.size(); i++) { TimeBlock b = ruleTimeBlocksPrev.get(i); if (timeBlockHasEarnCode(fromEarnGroup, b)) { Interval blockInterval = new Interval( b.getBeginDateTime().withZone(zone), b.getEndDateTime().withZone(zone)); // Calculate Block Gap, the duration between clock outs and clock ins of adjacent time blocks. if (previousBlockInterval != null) { blockGapDuration = new Duration(b.getEndDateTime().withZone(zone), previousBlockInterval.getStart()); bgdHours = TKUtils .convertMillisToHours(blockGapDuration.getMillis()); } // Check Gap, if good, sum hours, if maxGap is 0, ignore gaps if (rule.getMaxGap().compareTo(BigDecimal.ZERO) == 0 || bgdHours.compareTo(rule.getMaxGap()) <= 0) { // Calculate Overlap and add it to hours before virtual day bucket. if (blockInterval.overlaps(previousDayShiftInterval)) { BigDecimal hrs = TKUtils.convertMillisToHours(blockInterval .overlap(previousDayShiftInterval).toDurationMillis()); hoursBeforeVirtualDay = hoursBeforeVirtualDay.add(hrs); } } else { // Time blocks are reverse sorted, we can jump out as soon as the max gap is exceeded. break; } previousBlockInterval = blockInterval; } } } else { // DO NOTHING! } } } } BigDecimal hoursToApply = BigDecimal.ZERO; BigDecimal hoursToApplyPrevious = BigDecimal.ZERO; // If the hours before virtual day are less than or equal to // min hours, we have already applied the time, so we don't // set hoursToApplyPrevious if (hoursBeforeVirtualDay.compareTo(rule.getMinHours()) <= 0) { // we need to apply these hours. hoursToApplyPrevious = hoursBeforeVirtualDay; } // Current Day TimeBlock previous = null; // Previous Time Block List<TimeBlock> accumulatedBlocks = new ArrayList<TimeBlock>(); // TimeBlocks we MAY or MAY NOT apply Shift Premium to. List<Interval> accumulatedBlockIntervals = new ArrayList<Interval>(); // To save recompute time when checking timeblocks for application we store them as we create them. // Iterate over sorted list, checking time boundaries vs Shift Intervals. long accumulatedMillis = TKUtils.convertHoursToMillis(hoursBeforeVirtualDay); boolean previousDayOnly = false; // IF the rule is not active today, but was on the previous day, we need to still look at time blocks. if (!dayIsRuleActive(currentDay, rule)) { if (dayIsRuleActive(currentDay.minusDays(1), rule)) { previousDayOnly = true; } else { // Nothing to see here, move to next rule. continue; } } /* * We will touch each time block and accumulate time blocks that are applicable to * the current rule we are on. */ // These blocks are only used for detail application // We don't want to pass along the previous pay period, // because we don't want to modify the time blocks on that // period. If null is passed, time will be placed on the // first block of the first period if the previous period // block had influence. List<TimeBlock> previousBlocksFiltered = (previousPayPeriodPrevDay) ? null : filterBlocksByApplicableEarnGroup(fromEarnGroup, ruleTimeBlocksPrev); for (TimeBlock current : ruleTimeBlocksCurr) { if (!timeBlockHasEarnCode(fromEarnGroup, current)) { // TODO: WorkSchedule considerations somewhere in here? continue; } Interval blockInterval = new Interval(current.getBeginDateTime().withZone(zone), current.getEndDateTime().withZone(zone)); // Check both Intervals, since the time blocks could still // be applicable to the previous day. These two intervals should // not have any overlap. if (previousDayShiftInterval.overlaps(shiftInterval)) { LOG.error("Interval of greater than 24 hours created in the rules processing."); return; // throw new RuntimeException("Interval of greater than 24 hours created in the rules processing."); } // This block of code handles cases where you have time // that spills to multiple days and a shift rule that // has a valid window on multiple consecutive days. Time // must be applied with the correct shift interval. Interval overlap = previousDayShiftInterval.overlap(blockInterval); evalInterval = previousDayShiftInterval; if (overlap == null) { if (hoursToApplyPrevious.compareTo(BigDecimal.ZERO) > 0) { // we have hours from previous day, and the shift // window is going to move to current day. // Need to apply this now, and move window forward // for current time block. BigDecimal accumHours = TKUtils.convertMillisToHours(accumulatedMillis); this.applyAccumulatedWrapper(accumHours, evalInterval, accumulatedBlockIntervals, accumulatedBlocks, previousBlocksFiltered, hoursToApplyPrevious, hoursToApply, rule); accumulatedMillis = 0L; // reset accumulated hours.. hoursToApply = BigDecimal.ZERO; hoursToApplyPrevious = BigDecimal.ZERO; } // Because of our position in the loop, when we are at this point, // we know we've passed any previous day shift intervals, so we can // determine if we should skip the current day based on the boolean // we set earlier. if (previousDayOnly) { continue; } overlap = shiftInterval.overlap(blockInterval); evalInterval = shiftInterval; } // Time bucketing and application as normal: // if (overlap != null) { // There IS overlap. if (previous != null) { // only check max gap if max gap of rule is not 0 if (rule.getMaxGap().compareTo(BigDecimal.ZERO) != 0 && exceedsMaxGap(previous, current, rule.getMaxGap())) { BigDecimal accumHours = TKUtils.convertMillisToHours(accumulatedMillis); this.applyAccumulatedWrapper(accumHours, evalInterval, accumulatedBlockIntervals, accumulatedBlocks, previousBlocksFiltered, hoursToApplyPrevious, hoursToApply, rule); accumulatedMillis = 0L; // reset accumulated hours.. hoursToApply = BigDecimal.ZERO; hoursToApplyPrevious = BigDecimal.ZERO; } else { long millis = overlap.toDurationMillis(); accumulatedMillis += millis; hoursToApply = hoursToApply.add(TKUtils.convertMillisToHours(millis)); } } else { // Overlap shift at first time block. long millis = overlap.toDurationMillis(); accumulatedMillis += millis; hoursToApply = hoursToApply.add(TKUtils.convertMillisToHours(millis)); } accumulatedBlocks.add(current); accumulatedBlockIntervals.add(blockInterval); previous = current; // current can still apply to next. } else { // No Overlap / Outside of Rule if (previous != null) { BigDecimal accumHours = TKUtils.convertMillisToHours(accumulatedMillis); this.applyAccumulatedWrapper(accumHours, evalInterval, accumulatedBlockIntervals, accumulatedBlocks, previousBlocksFiltered, hoursToApplyPrevious, hoursToApply, rule); accumulatedMillis = 0L; // reset accumulated hours.. hoursToApply = BigDecimal.ZERO; hoursToApplyPrevious = BigDecimal.ZERO; } } } // All time blocks are iterated over, check for remainders. // Check containers for time, and apply if needed. BigDecimal accumHours = TKUtils.convertMillisToHours(accumulatedMillis); this.applyAccumulatedWrapper(accumHours, evalInterval, accumulatedBlockIntervals, accumulatedBlocks, previousBlocksFiltered, hoursToApplyPrevious, hoursToApply, rule); } } // Keep track of previous as we move day by day. jobNumberToTimeBlocksPreviousDay = jobNumberToTimeBlocks; previousPayPeriodPrevDay = false; } }
From source file:org.kuali.kpme.tklm.utils.TkTestUtils.java
License:Educational Community License
public static Map<DateTime, BigDecimal> getDateToHoursMap(TimeBlock timeBlock, TimeHourDetail timeHourDetail) { Map<DateTime, BigDecimal> dateToHoursMap = new HashMap<DateTime, BigDecimal>(); DateTime beginTime = timeBlock.getBeginDateTime(); DateTime endTime = timeBlock.getEndDateTime(); Days d = Days.daysBetween(beginTime, endTime); int numberOfDays = d.getDays(); if (numberOfDays < 1) { dateToHoursMap.put(timeBlock.getBeginDateTime(), timeHourDetail.getHours()); return dateToHoursMap; }//w ww. j a v a2s. co m DateTime currentTime = beginTime; for (int i = 0; i < numberOfDays; i++) { DateTime nextDayAtMidnight = currentTime.plusDays(1); nextDayAtMidnight = nextDayAtMidnight.hourOfDay().setCopy(12); nextDayAtMidnight = nextDayAtMidnight.minuteOfDay().setCopy(0); nextDayAtMidnight = nextDayAtMidnight.secondOfDay().setCopy(0); nextDayAtMidnight = nextDayAtMidnight.millisOfSecond().setCopy(0); Duration dur = new Duration(currentTime, nextDayAtMidnight); long duration = dur.getStandardSeconds(); BigDecimal hrs = new BigDecimal(duration / 3600, HrConstants.MATH_CONTEXT); dateToHoursMap.put(currentTime, hrs); currentTime = nextDayAtMidnight; } Duration dur = new Duration(currentTime, endTime); long duration = dur.getStandardSeconds(); BigDecimal hrs = new BigDecimal(duration / 3600, HrConstants.MATH_CONTEXT); dateToHoursMap.put(currentTime, hrs); return dateToHoursMap; }
From source file:org.libreplan.business.planner.limiting.entities.LimitingResourceQueueElement.java
License:Open Source License
public Duration getLengthBetween() { DateTime start = getStartDate().toDateTimeAtStartOfDay().plusHours(getStartHour()); DateTime end = getEndDate().toDateTimeAtStartOfDay().plusHours(getEndHour()); return new Duration(start, end); }
From source file:org.libreplan.web.limitingresources.QueueComponent.java
License:Open Source License
private static Component generateProgressBar(IDatesMapper datesMapper, LimitingResourceQueueElement queueElement) { DateAndHour advancementEndDate = getAdvanceEndDate(queueElement); if (advancementEndDate == null) { return null; }//from w w w. ja v a 2 s . com Duration durationBetween = new Duration(queueElement.getStartTime().toDateTime().getMillis(), advancementEndDate.toDateTime().getMillis()); Div progressBar = new Div(); if (!queueElement.getStartDate().isEqual(advancementEndDate.getDate())) { progressBar.setWidth(datesMapper.toPixels(durationBetween) + "px"); progressBar.setSclass("queue-progress-bar"); } return progressBar; }
From source file:org.mifos.core.StandardTestDateUtilityService.java
License:Open Source License
public void setCurrentDateTime(DateTime newTime) { Duration durToNewTime = new Duration(new DateTime(), newTime); DateTimeUtils.setCurrentMillisOffset(durToNewTime.getMillis()); }
From source file:org.netxilia.api.value.DateValue.java
License:Open Source License
@Override public Double getNumberValue() { return value != null ? (double) new Duration(ORIGIN, value.toDateTime(ORIGIN)).getMillis() / DateTimeConstants.MILLIS_PER_DAY : Double.valueOf(0);/* w ww . ja v a 2 s. co m*/ }
From source file:org.netxilia.functions.DateFunctions.java
License:Open Source License
public int DAYS360(ReadablePartial date1, ReadablePartial date2, boolean europeanMethod) { return (int) new Duration(DateUtils.toLocalDateTime(date1, ORIGIN).toDateTime(), DateUtils.toLocalDateTime(date2, ORIGIN).toDateTime()).getMillis() / DateTimeConstants.MILLIS_PER_DAY; }