Package org.openhab.binding.astro.internal.util

Source Code of org.openhab.binding.astro.internal.util.DateTimeUtils

/**
* Copyright (c) 2010-2014, openHAB.org and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.binding.astro.internal.util;

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

import org.apache.commons.lang.time.DateUtils;
import org.openhab.binding.astro.internal.model.Range;

/**
* Common used DateTime functions.
*
* @author Gerhard Riegler
* @since 1.6.0
*/
public class DateTimeUtils {
  public static final double J1970 = 2440588.0;
  public static final double MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24;

  /**
   * Truncates the time from the calendar object.
   */
  public static Calendar truncateToMidnight(Calendar calendar) {
    return DateUtils.truncate(calendar, Calendar.DAY_OF_MONTH);
  }

  /**
   * Creates a Range object within the specified months and days. The start
   * time is midnight, the end time is end of the day.
   */
  public static Range getRange(int startMonth, int startDay, int endMonth, int endDay) {
    Calendar start = Calendar.getInstance();
    start.set(Calendar.MONTH, startMonth);
    start.set(Calendar.DAY_OF_MONTH, startDay);
    start = truncateToMidnight(start);

    Calendar end = Calendar.getInstance();
    end.set(Calendar.MONTH, endMonth);
    end.set(Calendar.DAY_OF_MONTH, endDay);
    end.set(Calendar.HOUR_OF_DAY, 23);
    end.set(Calendar.MINUTE, 59);
    end.set(Calendar.SECOND, 59);
    end.set(Calendar.MILLISECOND, 999);

    return new Range(start, end);
  }

  /**
   * Returns a calendar object from a julian date.
   */
  public static Calendar toCalendar(double julianDate) {
    if (Double.compare(julianDate, Double.NaN) == 0 || julianDate == 0) {
      return null;
    }
    long millis = (long) ((julianDate + 0.5 - J1970) * MILLISECONDS_PER_DAY);
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(millis);
    return DateUtils.round(cal, Calendar.MINUTE);
  }

  /**
   * Returns the julian date from the calendar object.
   */
  public static double dateToJulianDate(Calendar calendar) {
    return calendar.getTimeInMillis() / MILLISECONDS_PER_DAY - 0.5 + J1970;
  }

  /**
   * Returns the midnight julian date from the calendar object.
   */
  public static double midnightDateToJulianDate(Calendar calendar) {
    return dateToJulianDate(truncateToMidnight(calendar));
  }

  /**
   * Returns the end of day julian date from the calendar object.
   */
  public static double endOfDayDateToJulianDate(Calendar calendar) {
    Calendar cal = (Calendar) calendar.clone();
    cal = DateUtils.ceiling(cal, Calendar.DATE);
    cal.add(Calendar.MILLISECOND, -1);
    return dateToJulianDate(cal);
  }

  /**
   * Returns the year of the calendar object as a decimal value.
   */
  public static double getDecimalYear(Calendar calendar) {
    return calendar.get(Calendar.YEAR) + (double) calendar.get(Calendar.DAY_OF_YEAR)
        / calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
  }

  /**
   * Converts the time (hour.minute) to a calendar object.
   */
  public static Calendar timeToCalendar(Calendar calendar, double time) {
    if (time < 0.0) {
      return null;
    }
    Calendar cal = (Calendar) calendar.clone();
    int hour = 0;
    int minute = 0;
    if (time == 24.0) {
      cal.add(Calendar.DAY_OF_MONTH, 1);
    } else {
      hour = (int) time;
      minute = (int) ((time * 100) - (hour * 100));
    }
    cal.set(Calendar.HOUR_OF_DAY, hour);
    cal.set(Calendar.MINUTE, minute);
    return DateUtils.truncate(cal, Calendar.MINUTE);
  }

  /**
   * Returns true, if two calendar objects are on the same day ignoring time.
   */
  public static boolean isSameDay(Calendar cal1, Calendar cal2) {
    return cal1 != null && cal2 != null && DateUtils.isSameDay(cal1, cal2);
  }

  /**
   * Returns a date object from a calendar.
   */
  public static Date getDate(Calendar calendar) {
    return calendar == null ? null : calendar.getTime();
  }

  /**
   * Returns the next Calendar from today.
   */
  public static Calendar getNext(Calendar... calendars) {
    Calendar now = Calendar.getInstance();
    Calendar next = null;
    for (Calendar calendar : calendars) {
      if (calendar.after(now) && (next == null || calendar.before(next))) {
        next = calendar;
      }
    }
    return next;
  }
}
TOP

Related Classes of org.openhab.binding.astro.internal.util.DateTimeUtils

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.