예제 #1
0
파일: ADate.java 프로젝트: jefferya/basex
 /**
  * Returns a day count for the specified years, months and days. All values must be specified in
  * their internal representation (undefined values are supported, too). Algorithm is derived from
  * J R Stockton (http://www.merlyn.demon.co.uk/daycount.htm).
  *
  * @param year year
  * @param month month
  * @param day days
  * @return days
  */
 private static BigDecimal days(final long year, final int month, final int day) {
   final long y = year - (month < 2 ? 1 : 0);
   final int m = month + (month < 2 ? 13 : 1);
   final int d = day + 1;
   return BD365
       .multiply(BigDecimal.valueOf(y))
       .add(BigDecimal.valueOf(y / 4 - y / 100 + y / 400 - 92 + d + (153 * m - 2) / 5));
 }
예제 #2
0
파일: ADate.java 프로젝트: jefferya/basex
 /**
  * Converts a day count into year, month and day components. Algorithm is derived from J R
  * Stockton (http://www.merlyn.demon.co.uk/daycount.htm).
  *
  * @param days day count
  * @return result array
  */
 private static long[] ymd(final BigDecimal days) {
   BigDecimal d = days;
   BigDecimal t =
       d.add(BD36525).multiply(BD4).divideToIntegralValue(BD146097).subtract(BigDecimal.ONE);
   BigDecimal y = BD100.multiply(t);
   d = d.subtract(BD36524.multiply(t).add(t.divideToIntegralValue(BD4)));
   t = d.add(BD366).multiply(BD4).divideToIntegralValue(BD1461).subtract(BigDecimal.ONE);
   y = y.add(t);
   d = d.subtract(BD365.multiply(t).add(t.divideToIntegralValue(BD4)));
   final BigDecimal m = BD5.multiply(d).add(BD2).divideToIntegralValue(BD153);
   d = d.subtract(BD153.multiply(m).add(BD2).divideToIntegralValue(BD5));
   long mm = m.longValue();
   if (mm > 9) {
     mm -= 12;
     y = y.add(BigDecimal.ONE);
   }
   return new long[] {y.subtract(BigDecimal.valueOf(ADD_NEG)).longValue(), mm + 2, d.longValue()};
 }