Package utils

Source Code of utils.DateTimeUtils$AgeInMonth

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package utils;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
*
* @author antony
*/
public class DateTimeUtils {
   
    /**
     * принадлежит текущему дню
     * @param d
     * @return
     */
    public static boolean belongsToCurrentDay(Date d) {
        Calendar cd = GregorianCalendar.getInstance();
        cd.setTime(d);
        Calendar cc = GregorianCalendar.getInstance();
        cc.setTimeInMillis(System.currentTimeMillis());
        return cd.get(Calendar.YEAR) == cc.get(Calendar.YEAR)
            && cd.get(Calendar.DAY_OF_YEAR) == cc.get(Calendar.DAY_OF_YEAR);
    }
   
    /**
     * Вычисляет количество дней между различными датами. Mежду двумя соседними
     * днями принимается разница 1 день (смена летнего. зимнего времени учтена)
     * @param begin
     * @param end
     * @return
     */
    public static long daysBetween(Date begin, Date end) {
        double diff = getDateOnly(end).getTime() - getDateOnly(begin).getTime();
        return Math.round(diff/(1000*3600*24));
    }

    /**
     * Вычисляет количество дней между различными датами. Mежду двумя соседними
     * днями принимается разница 1 день (смена летнего. зимнего времени учтена)
     * @param begin
     * @param end
     * @return
     */
    public static long daysBetween(Calendar begin, Calendar end) {
        return daysBetween(begin.getTime(), end.getTime());
    }

    /**
     * Приводит дату и время к только дате (зануляет часы минуты секунды и миллисекунды)
     * @param date
     * @return
     */
    public static Date getDateOnly(Date date) {
        if (date == null) {
            return null;
        }
        GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
        gc.setTime(date);
        gc = new GregorianCalendar(gc.get(GregorianCalendar.YEAR), gc.get(GregorianCalendar.MONTH), gc.get(GregorianCalendar.DAY_OF_MONTH));
        return gc.getTime();
    }

    /**
     * Приводит дату и время к только дате (зануляет часы минуты секунды и миллисекунды)
     * @param date
     * @return
     */
    public static Calendar getDateOnly(Calendar cal) {
        if (cal == null) {
            return null;
        }
        return new GregorianCalendar(cal.get(GregorianCalendar.YEAR), cal.get(GregorianCalendar.MONTH), cal.get(GregorianCalendar.DAY_OF_MONTH));
    }

    public static Date getNextDay(Date date) {
        if (date == null) {
            return null;
        }
        GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
        gc.setTime(date);
    gc.add(GregorianCalendar.DAY_OF_MONTH, 1);
        return gc.getTime();
   }

    public static Date getDateOnly() {
        GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
        gc = new GregorianCalendar(gc.get(GregorianCalendar.YEAR), gc.get(GregorianCalendar.MONTH), gc.get(GregorianCalendar.DAY_OF_MONTH));
        return gc.getTime();
    }
    /**
     * Вернёт число полных лет
     * @param from
     * @param to
     * @return
     */
    public static int calcAge(Date from, Date to){
    if (from == null || to == null) {
      return Integer.MIN_VALUE;
    }
    GregorianCalendar        calendarFrom = new GregorianCalendar();
    calendarFrom.setTime(from);
    GregorianCalendar        calendarTo = new GregorianCalendar();
    calendarTo.setTime(to);
    boolean              negative = calendarTo.before(calendarFrom);
    int                yearDif = calendarTo.get(GregorianCalendar.YEAR) - calendarFrom.get(GregorianCalendar.YEAR);
    calendarTo.set(GregorianCalendar.YEAR, calendarFrom.get(GregorianCalendar.YEAR));
    if (calendarTo.before(calendarFrom)) {
      if (!negative) {
        yearDif -= 1;
      }
    }
    else{
      if (negative) {
        yearDif += 1;
      }
    }
    return yearDif;
  }

  public static class AgeInMonth{
    int            month;
    int            days;

  }

    public static AgeInMonth calcAgeInMonth(Date from, Date to){
    if (from == null || to == null) {
      return null;
    }
    GregorianCalendar      calendarFrom = new GregorianCalendar();
    calendarFrom.setTime(from);
    GregorianCalendar      calendarTo = new GregorianCalendar();
    calendarTo.setTime(to);
    boolean            negative = calendarTo.before(calendarFrom);
    int              yearBase = calendarTo.get(GregorianCalendar.YEAR) - calendarFrom.get(GregorianCalendar.YEAR);
    int              monthDiff = calendarTo.get(GregorianCalendar.MONTH) - calendarFrom.get(GregorianCalendar.MONTH);
    monthDiff += yearBase * 12;
    calendarFrom.set(GregorianCalendar.YEAR, calendarFrom.get(GregorianCalendar.YEAR));
    calendarFrom.set(GregorianCalendar.MONTH, calendarFrom.get(GregorianCalendar.MONTH));
    /*if (){
    }*/
    int              dayDiff = calendarTo.get(GregorianCalendar.MONTH) - calendarFrom.get(GregorianCalendar.MONTH);

    return null;
  }

  private static String[]          DAY_NAMES = {
            "первое",
            "второе",
            "третье",
            "четвертое",
            "пятое",
            "шестое",
            "седьмое",
            "восьмое",
            "девятое",
            "десятое",
            "одиннадцатое",
            "двенадцатое",
            "тринадцатое",
            "четырнадцатое",
            "пятнадцатое",
            "шестнадцатое",
            "семнадцатое",
            "восемнадцатое",
            "девятнадцатое",
            "двадцатое",
          };
  private static String          DAY_TWENTY_PLUS = "двадцать ";
  private static String          DAY_THIRTY = "тридцатое";
  private static String          DAY_THIRTY_PLUS = "тридцать ";

  /**
   * приопразует день месяца в строку прописю, нужно для преобразования даты в строку прописью
   * @param day день месяца (от 1 до 31)
   * @return
   */

  static public String dayOfMonthToString(int day){
    if (day < 1 || day > 31){
      throw new IllegalArgumentException("is no day of month");
    }
    // в данном случае числа понятнее именованых констант
    if (day <= 20){
      return DAY_NAMES[day - 1];
    }
    if (day < 30){
      return DAY_TWENTY_PLUS + DAY_NAMES[day - 20 - 1];
    }
    if (day == 30){
      return DAY_THIRTY;
    }
    return DAY_THIRTY_PLUS + DAY_NAMES[day - 30 - 1];
  }

  static public String dayOfMonthToString(Date time){
    GregorianCalendar      col = new GregorianCalendar();
    col.setTime(time);
    return dayOfMonthToString(col.get(GregorianCalendar.DAY_OF_MONTH));
  }

  static public String[]          MONTH_NAMES = new String[]{
            "января",
            "февраля",
            "марта",
            "апреля",
            "мая",
            "июня",
            "июля",
            "августа",
            "сентября",
            "октября",
            "ноября",
            "декабря",
          };

  static public String monthToString(int month){
    if (month < 0 || month > 11){
      throw new IllegalArgumentException("Incorrect month");
    }
    return MONTH_NAMES[month];
  }

  static public String monthToString(Date time){
    GregorianCalendar      col = new GregorianCalendar();
    col.setTime(time);
    return monthToString(col.get(GregorianCalendar.MONTH));
  }

    static public boolean dateValid(int year, int month, int dayOfMonth) {
        if (year < 1800) {
            return false;
        }
        GregorianCalendar cal = new GregorianCalendar(year, month, dayOfMonth);
        if (cal.get(Calendar.YEAR) != year) {
            return false;
        }
        if (cal.get(Calendar.MONTH) != month) {
            return false;
        }
        if (cal.get(Calendar.DAY_OF_MONTH) != dayOfMonth) {
            return false;
        }
        return true;
    }
}
TOP

Related Classes of utils.DateTimeUtils$AgeInMonth

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.