/** * Convenience method - month is 0-based as in java.util.Calendar * * @param year * @param month * @param day * @return a calendar for the user locale and time zone, and the given date */ public static Calendar getLocaleCalendar(int year, int month, int day) { return getLocaleCalendar(year, month, day, 0, 0, 0); }
/** * Convenience method - month is 0-based as in java.util.Calendar * * @param year * @param month * @param day * @param hour * @param minute * @param second * @return a calendar for the user locale and time zone, and the given date */ public static Calendar getLocaleCalendar(int year, int month, int day, int hour, int minute, int second) { Calendar cal = getLocaleCalendar(); cal.set(year, month, day, hour, minute, second); cal.clear(Calendar.MILLISECOND); return cal; }
private static Calendar getDate(double date) { Calendar processedDate = LocaleUtil.getLocaleCalendar(); processedDate.setTime(DateUtil.getJavaDate(date, false)); return processedDate; }
/** * @param aDate a given date. * @return <code>true</code> if date is weekend, <code>false</code> otherwise. */ protected boolean isWeekend(double aDate) { Calendar date = LocaleUtil.getLocaleCalendar(); date.setTime(DateUtil.getJavaDate(aDate)); return date.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY; }
/** * @return a calendar for the user locale and time zone */ public static Calendar getLocaleCalendar() { return getLocaleCalendar(getUserTimeZone()); }
@Override public void setDate(final Date date) { final Calendar cal = LocaleUtil.getLocaleCalendar(); cal.setTime(date); comment.setDt(cal); }
/** * Given a Date, converts it into a double representing its internal Excel representation, * which is the number of days since 1/1/1900. Fractional days represent hours, minutes, and seconds. * * @return Excel representation of Date (-1 if error - test for error by checking for less than 0.1) * @param date the Date * @param use1904windowing Should 1900 or 1904 date windowing be used? */ public static double getExcelDate(Date date, boolean use1904windowing) { Calendar calStart = LocaleUtil.getLocaleCalendar(); calStart.setTime(date); // If date includes hours, minutes, and seconds, set them to 0 return internalGetExcelDate(calStart, use1904windowing); } /**
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex) { Calendar now = LocaleUtil.getLocaleCalendar(); now.clear(Calendar.HOUR); now.set(Calendar.HOUR_OF_DAY,0); now.clear(Calendar.MINUTE); now.clear(Calendar.SECOND); now.clear(Calendar.MILLISECOND); return new NumberEval(DateUtil.getExcelDate(now.getTime())); } }
/** * Get EXCEL date as Java Calendar with given time zone. * @param date The Excel date. * @param use1904windowing true if date uses 1904 windowing, * or false if using 1900 date windowing. * @param timeZone The TimeZone to evaluate the date in * @param roundSeconds round to closest second * @return Java representation of the date, or null if date is not a valid Excel date */ public static Calendar getJavaCalendar(double date, boolean use1904windowing, TimeZone timeZone, boolean roundSeconds) { if (!isValidExcelDate(date)) { return null; } int wholeDays = (int)Math.floor(date); int millisecondsInDay = (int)((date - wholeDays) * DAY_MILLISECONDS + 0.5); Calendar calendar; if (timeZone != null) { calendar = LocaleUtil.getLocaleCalendar(timeZone); } else { calendar = LocaleUtil.getLocaleCalendar(); // using default time-zone } setCalendar(calendar, wholeDays, millisecondsInDay, use1904windowing, roundSeconds); return calendar; }
/** * Calculates how many days of week past between a start and an end date. * * @param start start date. * @param end end date. * @param dayOfWeek a day of week as represented by {@link Calendar} constants. * @return how many days of week past in this interval. */ protected int pastDaysOfWeek(double start, double end, int dayOfWeek) { int pastDaysOfWeek = 0; int startDay = (int) Math.floor(start < end ? start : end); int endDay = (int) Math.floor(end > start ? end : start); for (; startDay <= endDay; startDay++) { Calendar today = LocaleUtil.getLocaleCalendar(); today.setTime(DateUtil.getJavaDate(startDay)); if (today.get(Calendar.DAY_OF_WEEK) == dayOfWeek) { pastDaysOfWeek++; } } return start <= end ? pastDaysOfWeek : -pastDaysOfWeek; }
/** * @param month 1-based */ private static Calendar makeDate(int year, int month, int day) throws EvaluationException { if (month < 1 || month > 12) { throw new EvaluationException(ErrorEval.VALUE_INVALID); } Calendar cal = LocaleUtil.getLocaleCalendar(year, month - 1, 1, 0, 0, 0); if (day < 1 || day > cal.getActualMaximum(Calendar.DAY_OF_MONTH)) { throw new EvaluationException(ErrorEval.VALUE_INVALID); } cal.set(Calendar.DAY_OF_MONTH, day); return cal; }
private static SimpleDate createDate(int dayCount) { /** use UTC time-zone to avoid daylight savings issues */ Calendar cal = LocaleUtil.getLocaleCalendar(LocaleUtil.TIMEZONE_UTC); DateUtil.setCalendar(cal, dayCount, 0, false, false); return new SimpleDate(cal); }
private static Date parseYYYYMMDDDateInternal(String timeStr) throws FormatException { if(timeStr.length() != 10) { throw new FormatException("Bad length"); } String yearStr = timeStr.substring(0, 4); String monthStr = timeStr.substring(5, 7); String dayStr = timeStr.substring(8, 10); int year = parseInt(yearStr, "year", Short.MIN_VALUE, Short.MAX_VALUE); int month = parseInt(monthStr, "month", 1, 12); int day = parseInt(dayStr, "day", 1, 31); Calendar cal = LocaleUtil.getLocaleCalendar(year, month-1, day); return cal.getTime(); } private static int parseInt(String strVal, String fieldName, int rangeMax) throws FormatException {
/** * Calculate the workday past x workdays from a starting date, considering a range of holidays. * * @param start start date. * @param workdays number of workdays to be past from starting date. * @param holidays an array of holidays. * @return date past x workdays. */ public Date calculateWorkdays(double start, int workdays, double[] holidays) { Date startDate = DateUtil.getJavaDate(start); int direction = workdays < 0 ? -1 : 1; Calendar endDate = LocaleUtil.getLocaleCalendar(); endDate.setTime(startDate); double excelEndDate = DateUtil.getExcelDate(endDate.getTime()); while (workdays != 0) { endDate.add(Calendar.DAY_OF_YEAR, direction); excelEndDate += direction; if (endDate.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && endDate.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY && !isHoliday(excelEndDate, holidays)) { workdays -= direction; } } return endDate.getTime(); }
Calendar c = LocaleUtil.getLocaleCalendar(year, month, day);
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { if (args.length != 2) { return ErrorEval.VALUE_INVALID; } try { double startDateAsNumber = getValue(args[0]); int offsetInMonthAsNumber = (int) getValue(args[1]); Date startDate = DateUtil.getJavaDate(startDateAsNumber); Calendar calendar = LocaleUtil.getLocaleCalendar(); calendar.setTime(startDate); calendar.add(Calendar.MONTH, offsetInMonthAsNumber); return new NumberEval(DateUtil.getExcelDate(calendar.getTime())); } catch (EvaluationException e) { return e.getErrorEval(); } }
Calendar cal = LocaleUtil.getLocaleCalendar(); cal.setTime(startDate); cal.clear(Calendar.HOUR);
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval serialNumVE, ValueEval returnTypeVE) { double serialNum; try { serialNum = NumericFunction.singleOperandEvaluate(serialNumVE, srcRowIndex, srcColumnIndex); } catch (EvaluationException e) { return ErrorEval.VALUE_INVALID; } Calendar serialNumCalendar = LocaleUtil.getLocaleCalendar(); serialNumCalendar.setTime(DateUtil.getJavaDate(serialNum, false)); int returnType; try { ValueEval ve = OperandResolver.getSingleValue(returnTypeVE, srcRowIndex, srcColumnIndex); returnType = OperandResolver.coerceValueToInt(ve); } catch (EvaluationException e) { return ErrorEval.NUM_ERROR; } if (returnType != 1 && returnType != 2) { return ErrorEval.NUM_ERROR; } return new NumberEval(this.getWeekNo(serialNumCalendar, returnType)); }
private static Calendar getDate(double date) { Calendar processedDate = LocaleUtil.getLocaleCalendar(); processedDate.setTime(DateUtil.getJavaDate(date, false)); return processedDate; }
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex) { Calendar now = LocaleUtil.getLocaleCalendar(); now.clear(Calendar.HOUR); now.set(Calendar.HOUR_OF_DAY,0); now.clear(Calendar.MINUTE); now.clear(Calendar.SECOND); now.clear(Calendar.MILLISECOND); return new NumberEval(DateUtil.getExcelDate(now.getTime())); } }