/** * Creates a new instance. * @param year year (1-...) * @param month month (1-12) * @param day day (1-31) * @param hour hour (0-23) * @param minute minute (0-59) * @param second second (0-59) */ public DateTime(int year, int month, int day, int hour, int minute, int second) { int date = DateUtil.getDayFromDate(year, month, day); int secondsInDay = DateUtil.getSecondFromTime(hour, minute, second); this.elapsedSeconds = (long) date * 86400 + secondsInDay; }
/** * Converts the number of elapsed seconds from {@code 0001/01/01 (YYYY/MM/DD) 00:00:00} to the corresponded date, * and set it to the target calendar object. * Note that, the millisecond fields will be set to {@code 0}. * @param seconds the number of elapsed seconds * @param calendar the target calendar object * @since 0.2.2 */ public static void setSecondToCalendar(long seconds, Calendar calendar) { int days = getDayFromSeconds(seconds); int year = getYearFromDay(days); int daysInYear = days - getDayFromYear(year); boolean leap = isLeap(year); int month = getMonthOfYear(daysInYear, leap); int day = getDayOfMonth(daysInYear, leap); int rest = getSecondOfDay(seconds); int hour = rest / (60 * 60); int minute = rest / 60 % 60; int second = rest % 60; calendar.set(year, month - 1, day, hour, minute, second); calendar.set(Calendar.MILLISECOND, 0); }
@Override void emit(int elapsedDate, StringBuilder output) { DateUtil.toDateString(elapsedDate, separator, output); } }
/** * Returns the year of this date and time. * @return the year (1-) */ public int getYear() { int days = DateUtil.getDayFromSeconds(elapsedSeconds); return DateUtil.getYearFromDay(days); }
/** * Returns a date as the number of elapsed days from {@code 0001/01/01 (YYYY/MM/DD)}. * @param date the target date object * @return the number of elapsed days (0-origin) * @since 0.7.0 */ public static int getDayFromDate(java.util.Date date) { return getDayFromCalendar(toCachedCalendar(date)); }
private static void appendDateString(StringBuilder buf, int days, char separator) { int year = DateUtil.getYearFromDay(days); boolean leap = DateUtil.isLeap(year); int dayInYear = days - DateUtil.getDayFromYear(year); int month = DateUtil.getMonthOfYear(dayInYear, leap); int day = DateUtil.getDayOfMonth(dayInYear, DateUtil.isLeap(year)); fill(buf, 4, year); buf.append(separator); fill(buf, 2, month); buf.append(separator); fill(buf, 2, day); }
/** * Creates a new instance. * @param year year (1-...) * @param month month (1-12) * @param day day (1-31) */ public Date(int year, int month, int day) { this(DateUtil.getDayFromDate(year, month, day)); }
int length = value.length(); if (length >= COL_SECOND_END && is(value, COL_YEAR_END, dateSegmentSeparator) && is(value, COL_MONTH_END, dateSegmentSeparator) && is(value, COL_DAY_END, dateTimeSeparator) && is(value, COL_HOUR_END, timeSegmentSeparator) && is(value, COL_MINUTE_END, timeSegmentSeparator)) { int year = parse(value, COL_YEAR_BEGIN, COL_YEAR_END); int month = parse(value, COL_MONTH_BEGIN, COL_MONTH_END); int day = parse(value, COL_DAY_BEGIN, COL_DAY_END); int hour = parse(value, COL_HOUR_BEGIN, COL_HOUR_END); int minute = parse(value, COL_MINUTE_BEGIN, COL_MINUTE_END); int second = parse(value, COL_SECOND_BEGIN, COL_SECOND_END); if (year > 0 && month > 0 && day > 0 && hour >= 0 && minute >= 0 && second >= 0) { long result = DateUtil.getDayFromDate(year, month, day) * 86400L; result += DateUtil.getSecondFromTime(hour, minute, second); return result;
/** * Returns the day of this date and time. * @return the day (1-31) */ public int getDay() { int year = getYear(); int days = DateUtil.getDayFromSeconds(elapsedSeconds); int dayInYear = days - DateUtil.getDayFromYear(year); return DateUtil.getDayOfMonth(dayInYear, DateUtil.isLeap(year)); }
/** * Returns the month of this date and time. * @return the month (1-12) */ public int getMonth() { int days = DateUtil.getDayFromSeconds(elapsedSeconds); int year = getYear(); int dayInYear = days - DateUtil.getDayFromYear(year); return DateUtil.getMonthOfYear(dayInYear, DateUtil.isLeap(year)); }
if (year > 0 && month > 0 && day > 0 && hour >= 0 && minute >= 0 && second >= 0) { long result = DateUtil.getDayFromDate(year, month, day) * 86400L; result += DateUtil.getSecondFromTime(hour, minute, second); return result; return DateUtil.getSecondFromDate(date); } catch (ParseException e) { return -1;
/** * Appends a string representation of {@link DateTime}. * @param elapsedSeconds the number of elapsed seconds from 0001/01/01 00:00:00 * @param dateSegmentSeparator the separator char between each date segment * @param dateTimeSeparator the separator char between date and time * @param timeSegmentSeparator the separator char between each time segment * @param target the target buffer * @since 0.7.0 */ public static void toDateTimeString( long elapsedSeconds, char dateSegmentSeparator, char dateTimeSeparator, char timeSegmentSeparator, StringBuilder target) { appendDateString(target, DateUtil.getDayFromSeconds(elapsedSeconds), dateSegmentSeparator); target.append(dateTimeSeparator); appendTimeString(target, DateUtil.getSecondOfDay(elapsedSeconds), timeSegmentSeparator); }
/** * Parses a {@code Date} value. * @param value the date value * @param dateSegmentSeparator the separator char between each date segment * @return the days for {@link Date} object * @since 0.7.0 */ public static int parseDate( CharSequence value, char dateSegmentSeparator) { int length = value.length(); if (length == COL_DAY_END && is(value, COL_YEAR_END, dateSegmentSeparator) && is(value, COL_MONTH_END, dateSegmentSeparator)) { int year = parse(value, COL_YEAR_BEGIN, COL_YEAR_END); int month = parse(value, COL_MONTH_BEGIN, COL_MONTH_END); int day = parse(value, COL_DAY_BEGIN, COL_DAY_END); if (year > 0 && month > 0 && day > 0) { return DateUtil.getDayFromDate(year, month, day); } } return -1; }
/** * Returns the day of this date. * @return the day (1-31) */ public int getDay() { int year = getYear(); int dayInYear = elapsedDays - DateUtil.getDayFromYear(year); return DateUtil.getDayOfMonth(dayInYear, DateUtil.isLeap(year)); }
/** * Returns the month of this date. * @return the month (1-12) */ public int getMonth() { int year = getYear(); int dayInYear = elapsedDays - DateUtil.getDayFromYear(year); return DateUtil.getMonthOfYear(dayInYear, DateUtil.isLeap(year)); }
@Override public void emit(DateTimeOption option) throws IOException { startCell(); if (emitNull(option)) { return; } long seconds = option.get().getElapsedSeconds(); int days = DateUtil.getDayFromSeconds(seconds); emitDate(days); lineBuffer.append(DATE_TIME_SEPARATOR); int sec = DateUtil.getSecondOfDay(seconds); emitTime(sec); }
/** * Returns the hour of this date time. * @return the hour (0-23) */ public int getHour() { int sec = DateUtil.getSecondOfDay(elapsedSeconds); return sec / (60 * 60); }
@Override void emit(long elapsedSeconds, StringBuilder output) { DateUtil.toDateTimeString( elapsedSeconds, dateSegmentSeparator, dateTimeSeparator, timeSegmentSeparator, output); } }
/** * Returns a date as the number of elapsed days from {@code 0001/01/01 (YYYY/MM/DD)}. * @param year year * @param month month (1-12) * @param day day (1-31) * @return the number of elapsed days (0-origin) */ public static int getDayFromDate(int year, int month, int day) { int result = 0; result += getDayFromYear(year); result += DAYS_MONTH[month - 1]; result += day - 1; if (month >= 3 && isLeap(year)) { result += 1; } return result; }
/** * Converts the date and time as the number of elapsed seconds from {@code 0001/01/01 (YYYY/MM/DD) 00:00:00}. * @param calendar the target calendar object * @return the number of elapsed seconds (0-origin) * @since 0.2.2 */ public static long getSecondFromCalendar(Calendar calendar) { int days = getDayFromCalendar(calendar); long result = (long) days * 86400; result += calendar.get(Calendar.HOUR_OF_DAY) * 60 * 60; result += calendar.get(Calendar.MINUTE) * 60; result += calendar.get(Calendar.SECOND); return result; }