blob: f085b1c5320c532792ae46e23e2982c47596cf1d [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.user.datepicker.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormatInfo;
import com.google.gwt.i18n.client.LocaleInfo;
import java.util.Date;
/**
* Useful utilities for creating views of a calendar.
*/
public class CalendarUtil {
private static int firstDayOfWeekend;
private static int lastDayOfWeekend;
private static int startingDay;
static {
if (GWT.isClient()) {
DateTimeFormatInfo dateTimeFormatInfo = LocaleInfo.getCurrentLocale().getDateTimeFormatInfo();
// Finding the start and end of weekend
firstDayOfWeekend = dateTimeFormatInfo.weekendStart();
lastDayOfWeekend = dateTimeFormatInfo.weekendEnd();
startingDay = dateTimeFormatInfo.firstDayOfTheWeek();
}
}
/**
* Adds the given number of days to a date.
*
* @param date the date
* @param days number of days
*/
@SuppressWarnings("deprecation") // GWT requires Date
public static void addDaysToDate(Date date, int days) {
date.setDate(date.getDate() + days);
}
/**
* Adds the given number of months to a date.
*
* @param date the date
* @param months number of months
*/
@SuppressWarnings("deprecation") // GWT requires Date
public static void addMonthsToDate(Date date, int months) {
if (months != 0) {
int month = date.getMonth();
int year = date.getYear();
int resultMonthCount = year * 12 + month + months;
int resultYear = resultMonthCount / 12;
int resultMonth = resultMonthCount - resultYear * 12;
date.setMonth(resultMonth);
date.setYear(resultYear);
}
}
/**
* Copies a date.
*
* @param date the date
* @return the copy
*/
public static Date copyDate(Date date) {
if (date == null) {
return null;
}
Date newDate = new Date();
newDate.setTime(date.getTime());
return newDate;
}
/**
* Returns the number of days between the two dates. Time is ignored.
*
* @param start starting date
* @param finish ending date
* @return the different
*/
public static int getDaysBetween(Date start, Date finish) {
// Convert the dates to the same time
start = copyDate(start);
resetTime(start);
finish = copyDate(finish);
resetTime(finish);
long aTime = start.getTime();
long bTime = finish.getTime();
long adjust = 60 * 60 * 1000;
adjust = (bTime > aTime) ? adjust : -adjust;
return (int) ((bTime - aTime + adjust) / (24 * 60 * 60 * 1000));
}
/**
* Returns the day of the week on which week starts in the current locale. The
* range between 0 for Sunday and 6 for Saturday.
*
* @return the day of the week
*/
public static int getStartingDayOfWeek() {
return startingDay;
}
/**
* Check if two dates represent the same date of the same year, even if they
* have different times.
*
* @param date0 a date
* @param date1 a second date
* @return true if the dates are the same
*/
@SuppressWarnings("deprecation") // GWT requires Date
public static boolean isSameDate(Date date0, Date date1) {
assert date0 != null : "date0 cannot be null";
assert date1 != null : "date1 cannot be null";
return date0.getYear() == date1.getYear()
&& date0.getMonth() == date1.getMonth()
&& date0.getDate() == date1.getDate();
}
/**
* Sets a date object to be at the beginning of the month and no time
* specified.
*
* @param date the date
*/
@SuppressWarnings("deprecation") // GWT requires Date
public static void setToFirstDayOfMonth(Date date) {
resetTime(date);
date.setDate(1);
}
/**
* Is a day in the week a weekend?
*
* @param dayOfWeek day of week
* @return is the day of week a weekend?
*/
static boolean isWeekend(int dayOfWeek) {
return dayOfWeek == firstDayOfWeekend || dayOfWeek == lastDayOfWeekend;
}
/**
* Resets the date to have no time modifiers.
*
* @param date the date
*/
@SuppressWarnings("deprecation") // GWT requires Date
private static void resetTime(Date date) {
long msec = date.getTime();
msec = (msec / 1000) * 1000;
date.setTime(msec);
// Daylight savings time occurs at midnight in some time zones, so we reset
// the time to noon instead.
date.setHours(12);
date.setMinutes(0);
date.setSeconds(0);
}
}