zoukankan      html  css  js  c++  java
  • UtilDateTime 有关日期的公共类

    /*******************************************************************************
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements. See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership. The ASF licenses this file
    * to you 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 cn.com.mcd.util;

    import java.sql.Timestamp;
    import java.text.DateFormat;
    import java.text.DecimalFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Locale;
    import java.util.Map;
    import java.util.TimeZone;

    import java.util.Calendar;

    /**
    * Utility class for handling java.util.Date, the java.sql data/time classes and related
    */
    public class UtilDateTime {
    public static final String[] months = {// // to be translated over CommonMonthName, see example in accounting
    "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November",
    "December"
    };

    public static final String[] days = {// to be translated over CommonDayName, see example in accounting
    "Monday", "Tuesday", "Wednesday",
    "Thursday", "Friday", "Saturday", "Sunday"
    };

    public static final String[][] timevals = {
    {"1000", "millisecond"},
    {"60", "second"},
    {"60", "minute"},
    {"24", "hour"},
    {"168", "week"}
    };

    public static final DecimalFormat df = new DecimalFormat("0.00;-0.00");
    /**
    * JDBC escape format for java.sql.Date conversions.
    */
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    /**
    * JDBC escape format for java.sql.Timestamp conversions.
    */
    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
    /**
    * JDBC escape format for java.sql.Time conversions.
    */
    public static final String TIME_FORMAT = "HH:mm:ss";

    public static double getInterval(Date from, Date thru) {
    return thru != null ? thru.getTime() - from.getTime() : 0;
    }

    public static int getIntervalInDays(Timestamp from, Timestamp thru) {
    return thru != null ? (int) ((thru.getTime() - from.getTime()) / (24*60*60*1000)) : 0;
    }

    public static Timestamp addDaysToTimestamp(Timestamp start, int days) {
    return new Timestamp(start.getTime() + (24L*60L*60L*1000L*days));
    }

    public static Timestamp addDaysToTimestamp(Timestamp start, Double days) {
    return new Timestamp(start.getTime() + ((int) (24L*60L*60L*1000L*days)));
    }

    public static double getInterval(Timestamp from, Timestamp thru) {
    return thru != null ? thru.getTime() - from.getTime() + (thru.getNanos() - from.getNanos()) / 1000000 : 0;
    }

    /**
    * Return a Timestamp for right now
    *
    * @return Timestamp for right now
    */
    public static java.sql.Timestamp nowTimestamp() {
    return getTimestamp(System.currentTimeMillis());
    }

    /**
    * Convert a millisecond value to a Timestamp.
    * @param time millsecond value
    * @return Timestamp
    */
    public static java.sql.Timestamp getTimestamp(long time) {
    return new java.sql.Timestamp(time);
    }

    /**
    * Convert a millisecond value to a Timestamp.
    * @param milliSecs millsecond value
    * @return Timestamp
    */
    public static Timestamp getTimestamp(String milliSecs) throws NumberFormatException {
    return new Timestamp(Long.parseLong(milliSecs));
    }

    /**
    * Returns currentTimeMillis as String
    *
    * @return String(currentTimeMillis)
    */
    public static String nowAsString() {
    return Long.toString(System.currentTimeMillis());
    }

    /**
    * Return a string formatted as yyyyMMddHHmmss
    *
    * @return String formatted for right now
    */
    public static String nowDateString() {
    return nowDateString("yyyyMMddHHmmss");
    }
    /**
    * Return a string formatted as yyyyMMddHHmmss
    *
    * @return String formatted for right now
    */
    public static String nowDateToString() {
    return nowDateString("yyyyMMddHHmm");
    }


    /**
    * Return a string formatted as format
    *
    * @return String formatted for right now
    */
    public static String nowDateString(String format) {
    SimpleDateFormat df = new SimpleDateFormat(format);
    return df.format(new Date());
    }

    /**
    * Return a Date for right now
    *
    * @return Date for right now
    */
    public static java.util.Date nowDate() {
    return new java.util.Date();
    }

    public static java.sql.Timestamp getDayStart(java.sql.Timestamp stamp) {
    return getDayStart(stamp, 0);
    }

    public static java.sql.Timestamp getDayStart(java.sql.Timestamp stamp, int daysLater) {
    return getDayStart(stamp, daysLater, TimeZone.getDefault(), Locale.getDefault());
    }

    public static java.sql.Timestamp getNextDayStart(java.sql.Timestamp stamp) {
    return getDayStart(stamp, 1);
    }

    public static java.sql.Timestamp getDayEnd(java.sql.Timestamp stamp) {
    return getDayEnd(stamp, Long.valueOf(0));
    }

    public static java.sql.Timestamp getDayEnd(java.sql.Timestamp stamp, Long daysLater) {
    return getDayEnd(stamp, daysLater, TimeZone.getDefault(), Locale.getDefault());
    }

    /**
    * Return the date for the first day of the year
    *
    * @param stamp
    * @return java.sql.Timestamp
    */
    public static java.sql.Timestamp getYearStart(java.sql.Timestamp stamp) {
    return getYearStart(stamp, 0, 0, 0);
    }

    public static java.sql.Timestamp getYearStart(java.sql.Timestamp stamp, int daysLater) {
    return getYearStart(stamp, daysLater, 0, 0);
    }

    public static java.sql.Timestamp getYearStart(java.sql.Timestamp stamp, int daysLater, int yearsLater) {
    return getYearStart(stamp, daysLater, 0, yearsLater);
    }
    public static java.sql.Timestamp getYearStart(java.sql.Timestamp stamp, int daysLater, int monthsLater, int yearsLater) {
    return getYearStart(stamp, daysLater, monthsLater, yearsLater, TimeZone.getDefault(), Locale.getDefault());
    }
    public static java.sql.Timestamp getYearStart(java.sql.Timestamp stamp, Number daysLater, Number monthsLater, Number yearsLater) {
    return getYearStart(stamp, (daysLater == null ? 0 : daysLater.intValue()),
    (monthsLater == null ? 0 : monthsLater.intValue()), (yearsLater == null ? 0 : yearsLater.intValue()));
    }

    /**
    * Return the date for the first day of the month
    *
    * @param stamp
    * @return java.sql.Timestamp
    */
    public static java.sql.Timestamp getMonthStart(java.sql.Timestamp stamp) {
    return getMonthStart(stamp, 0, 0);
    }

    public static java.sql.Timestamp getMonthStart(java.sql.Timestamp stamp, int daysLater) {
    return getMonthStart(stamp, daysLater, 0);
    }

    public static java.sql.Timestamp getMonthStart(java.sql.Timestamp stamp, int daysLater, int monthsLater) {
    return getMonthStart(stamp, daysLater, monthsLater, TimeZone.getDefault(), Locale.getDefault());
    }

    /**
    * Return the date for the first day of the week
    *
    * @param stamp
    * @return java.sql.Timestamp
    */
    public static java.sql.Timestamp getWeekStart(java.sql.Timestamp stamp) {
    return getWeekStart(stamp, 0, 0);
    }

    public static java.sql.Timestamp getWeekStart(java.sql.Timestamp stamp, int daysLater) {
    return getWeekStart(stamp, daysLater, 0);
    }

    public static java.sql.Timestamp getWeekStart(java.sql.Timestamp stamp, int daysLater, int weeksLater) {
    return getWeekStart(stamp, daysLater, weeksLater, TimeZone.getDefault(), Locale.getDefault());
    }

    public static java.sql.Timestamp getWeekEnd(java.sql.Timestamp stamp) {
    return getWeekEnd(stamp, TimeZone.getDefault(), Locale.getDefault());
    }

    public static java.util.Calendar toCalendar(java.sql.Timestamp stamp) {
    Calendar cal = Calendar.getInstance();
    if (stamp != null) {
    cal.setTimeInMillis(stamp.getTime());
    }
    return cal;
    }

    /**
    * Converts a date String into a java.sql.Date
    *
    * @param date The date String: MM/DD/YYYY
    * @return A java.sql.Date made from the date String
    */
    public static java.sql.Date toSqlDate(String date) {
    java.util.Date newDate = toDate(date, "00:00:00");

    if (newDate != null) {
    return new java.sql.Date(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Makes a java.sql.Date from separate Strings for month, day, year
    *
    * @param monthStr The month String
    * @param dayStr The day String
    * @param yearStr The year String
    * @return A java.sql.Date made from separate Strings for month, day, year
    */
    public static java.sql.Date toSqlDate(String monthStr, String dayStr, String yearStr) {
    java.util.Date newDate = toDate(monthStr, dayStr, yearStr, "0", "0", "0");

    if (newDate != null) {
    return new java.sql.Date(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Makes a java.sql.Date from separate ints for month, day, year
    *
    * @param month The month int
    * @param day The day int
    * @param year The year int
    * @return A java.sql.Date made from separate ints for month, day, year
    */
    public static java.sql.Date toSqlDate(int month, int day, int year) {
    java.util.Date newDate = toDate(month, day, year, 0, 0, 0);

    if (newDate != null) {
    return new java.sql.Date(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Converts a time String into a java.sql.Time
    *
    * @param time The time String: either HH:MM or HH:MM:SS
    * @return A java.sql.Time made from the time String
    */
    public static java.sql.Time toSqlTime(String time) {
    java.util.Date newDate = toDate("1/1/1970", time);

    if (newDate != null) {
    return new java.sql.Time(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Makes a java.sql.Time from separate Strings for hour, minute, and second.
    *
    * @param hourStr The hour String
    * @param minuteStr The minute String
    * @param secondStr The second String
    * @return A java.sql.Time made from separate Strings for hour, minute, and second.
    */
    public static java.sql.Time toSqlTime(String hourStr, String minuteStr, String secondStr) {
    java.util.Date newDate = toDate("0", "0", "0", hourStr, minuteStr, secondStr);

    if (newDate != null) {
    return new java.sql.Time(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Makes a java.sql.Time from separate ints for hour, minute, and second.
    *
    * @param hour The hour int
    * @param minute The minute int
    * @param second The second int
    * @return A java.sql.Time made from separate ints for hour, minute, and second.
    */
    public static java.sql.Time toSqlTime(int hour, int minute, int second) {
    java.util.Date newDate = toDate(0, 0, 0, hour, minute, second);

    if (newDate != null) {
    return new java.sql.Time(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Converts a date and time String into a Timestamp
    *
    * @param dateTime A combined data and time string in the format "MM/DD/YYYY HH:MM:SS", the seconds are optional
    * @return The corresponding Timestamp
    */
    public static java.sql.Timestamp toTimestamp(String dateTime) {
    java.util.Date newDate = toDate(dateTime);

    if (newDate != null) {
    return new java.sql.Timestamp(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Converts a date String and a time String into a Timestamp
    *
    * @param date The date String: MM/DD/YYYY
    * @param time The time String: either HH:MM or HH:MM:SS
    * @return A Timestamp made from the date and time Strings
    */
    public static java.sql.Timestamp toTimestamp(String date, String time) {
    java.util.Date newDate = toDate(date, time);

    if (newDate != null) {
    return new java.sql.Timestamp(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Makes a Timestamp from separate Strings for month, day, year, hour, minute, and second.
    *
    * @param monthStr The month String
    * @param dayStr The day String
    * @param yearStr The year String
    * @param hourStr The hour String
    * @param minuteStr The minute String
    * @param secondStr The second String
    * @return A Timestamp made from separate Strings for month, day, year, hour, minute, and second.
    */
    public static java.sql.Timestamp toTimestamp(String monthStr, String dayStr, String yearStr, String hourStr,
    String minuteStr, String secondStr) {
    java.util.Date newDate = toDate(monthStr, dayStr, yearStr, hourStr, minuteStr, secondStr);

    if (newDate != null) {
    return new java.sql.Timestamp(newDate.getTime());
    } else {
    return null;
    }
    }

    /**
    * Makes a Timestamp from separate ints for month, day, year, hour, minute, and second.
    *
    * @param month The month int
    * @param day The day int
    * @param year The year int
    * @param hour The hour int
    * @param minute The minute int
    * @param second The second int
    * @return A Timestamp made from separate ints for month, day, year, hour, minute, and second.
    */
    public static java.sql.Timestamp toTimestamp(int month, int day, int year, int hour, int minute, int second) {
    java.util.Date newDate = toDate(month, day, year, hour, minute, second);

    if (newDate != null) {
    return new java.sql.Timestamp(newDate.getTime());
    } else {
    return null;
    }
    }

    public static java.sql.Timestamp toTimestamp(Date date) {
    if (date == null) return null;
    return new Timestamp(date.getTime());
    }

    /**
    * Converts a date and time String into a Date
    *
    * @param dateTime A combined data and time string in the format "MM/DD/YYYY HH:MM:SS", the seconds are optional
    * @return The corresponding Date
    */
    public static java.util.Date toDate(String dateTime) {
    if (dateTime == null) {
    return null;
    }
    // dateTime must have one space between the date and time...
    String date = dateTime.substring(0, dateTime.indexOf(" "));
    String time = dateTime.substring(dateTime.indexOf(" ") + 1);

    return toDate(date, time);
    }

    /**
    * Converts a date String and a time String into a Date
    *
    * @param date The date String: MM/DD/YYYY
    * @param time The time String: either HH:MM or HH:MM:SS
    * @return A Date made from the date and time Strings
    */
    public static java.util.Date toDate(String date, String time) {
    if (date == null || time == null) return null;
    String month;
    String day;
    String year;
    String hour;
    String minute;
    String second;

    int dateSlash1 = date.indexOf("/");
    int dateSlash2 = date.lastIndexOf("/");

    if (dateSlash1 <= 0 || dateSlash1 == dateSlash2) return null;
    int timeColon1 = time.indexOf(":");
    int timeColon2 = time.lastIndexOf(":");

    if (timeColon1 <= 0) return null;
    month = date.substring(0, dateSlash1);
    day = date.substring(dateSlash1 + 1, dateSlash2);
    year = date.substring(dateSlash2 + 1);
    hour = time.substring(0, timeColon1);

    if (timeColon1 == timeColon2) {
    minute = time.substring(timeColon1 + 1);
    second = "0";
    } else {
    minute = time.substring(timeColon1 + 1, timeColon2);
    second = time.substring(timeColon2 + 1);
    }

    return toDate(month, day, year, hour, minute, second);
    }

    /**
    * Makes a Date from separate Strings for month, day, year, hour, minute, and second.
    *
    * @param monthStr The month String
    * @param dayStr The day String
    * @param yearStr The year String
    * @param hourStr The hour String
    * @param minuteStr The minute String
    * @param secondStr The second String
    * @return A Date made from separate Strings for month, day, year, hour, minute, and second.
    */
    public static java.util.Date toDate(String monthStr, String dayStr, String yearStr, String hourStr,
    String minuteStr, String secondStr) {
    int month, day, year, hour, minute, second;

    try {
    month = Integer.parseInt(monthStr);
    day = Integer.parseInt(dayStr);
    year = Integer.parseInt(yearStr);
    hour = Integer.parseInt(hourStr);
    minute = Integer.parseInt(minuteStr);
    second = Integer.parseInt(secondStr);
    } catch (Exception e) {
    return null;
    }
    return toDate(month, day, year, hour, minute, second);
    }

    /**
    * Makes a Date from separate ints for month, day, year, hour, minute, and second.
    *
    * @param month The month int
    * @param day The day int
    * @param year The year int
    * @param hour The hour int
    * @param minute The minute int
    * @param second The second int
    * @return A Date made from separate ints for month, day, year, hour, minute, and second.
    */
    public static java.util.Date toDate(int month, int day, int year, int hour, int minute, int second) {
    Calendar calendar = Calendar.getInstance();

    try {
    calendar.set(year, month - 1, day, hour, minute, second);
    calendar.set(Calendar.MILLISECOND, 0);
    } catch (Exception e) {
    return null;
    }
    return new java.util.Date(calendar.getTime().getTime());
    }

    /**
    * Makes a date String in the given from a Date
    *
    * @param date The Date
    * @return A date String in the given format
    */
    public static String toDateString(java.util.Date date, String format) {
    if (date == null) return "";
    SimpleDateFormat dateFormat = null;
    if (format != null) {
    dateFormat = new SimpleDateFormat(format);
    } else {
    dateFormat = new SimpleDateFormat();
    }

    Calendar calendar = Calendar.getInstance();

    calendar.setTime(date);
    return dateFormat.format(date);
    }

    /**
    * Makes a date String in the format MM/DD/YYYY from a Date
    *
    * @param date The Date
    * @return A date String in the format MM/DD/YYYY
    */
    public static String toDateString(java.util.Date date) {
    return toDateString(date, "MM/dd/yyyy");
    }

    /**
    * Makes a time String in the format HH:MM:SS from a Date. If the seconds are 0, then the output is in HH:MM.
    *
    * @param date The Date
    * @return A time String in the format HH:MM:SS or HH:MM
    */
    public static String toTimeString(java.util.Date date) {
    if (date == null) return "";
    Calendar calendar = Calendar.getInstance();

    calendar.setTime(date);
    return (toTimeString(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND)));
    }

    /**
    * Makes a time String in the format HH:MM:SS from a separate ints for hour, minute, and second. If the seconds are 0, then the output is in HH:MM.
    *
    * @param hour The hour int
    * @param minute The minute int
    * @param second The second int
    * @return A time String in the format HH:MM:SS or HH:MM
    */
    public static String toTimeString(int hour, int minute, int second) {
    String hourStr;
    String minuteStr;
    String secondStr;

    if (hour < 10) {
    hourStr = "0" + hour;
    } else {
    hourStr = "" + hour;
    }
    if (minute < 10) {
    minuteStr = "0" + minute;
    } else {
    minuteStr = "" + minute;
    }
    if (second < 10) {
    secondStr = "0" + second;
    } else {
    secondStr = "" + second;
    }
    if (second == 0) {
    return hourStr + ":" + minuteStr;
    } else {
    return hourStr + ":" + minuteStr + ":" + secondStr;
    }
    }

    /**
    * Makes a combined data and time string in the format "MM/DD/YYYY HH:MM:SS" from a Date. If the seconds are 0 they are left off.
    *
    * @param date The Date
    * @return A combined data and time string in the format "MM/DD/YYYY HH:MM:SS" where the seconds are left off if they are 0.
    */
    public static String toDateTimeString(java.util.Date date) {
    if (date == null) return "";
    String dateString = toDateString(date);
    String timeString = toTimeString(date);

    if (dateString != null && timeString != null) {
    return dateString + " " + timeString;
    } else {
    return "";
    }
    }

    public static String toGmtTimestampString(Timestamp timestamp) {
    DateFormat df = DateFormat.getDateTimeInstance();
    df.setTimeZone(TimeZone.getTimeZone("GMT"));
    return df.format(timestamp);
    }


    /**
    * Makes a Timestamp for the beginning of the month
    *
    * @return A Timestamp of the beginning of the month
    */
    public static java.sql.Timestamp monthBegin() {
    Calendar mth = Calendar.getInstance();

    mth.set(Calendar.DAY_OF_MONTH, 1);
    mth.set(Calendar.HOUR_OF_DAY, 0);
    mth.set(Calendar.MINUTE, 0);
    mth.set(Calendar.SECOND, 0);
    mth.set(Calendar.MILLISECOND, 0);
    mth.set(Calendar.AM_PM, Calendar.AM);
    return new java.sql.Timestamp(mth.getTime().getTime());
    }

    /**
    * returns a week number in a year for a Timestamp input
    *
    * @param input Timestamp date
    * @return A int containing the week number
    */
    public static int weekNumber(Timestamp input) {
    return weekNumber(input, TimeZone.getDefault(), Locale.getDefault());
    }

    /**
    * returns a day number in a week for a Timestamp input
    *
    * @param stamp Timestamp date
    * @return A int containing the day number (sunday = 1, saturday = 7)
    */
    public static int dayNumber(Timestamp stamp) {
    Calendar tempCal = toCalendar(stamp, TimeZone.getDefault(), Locale.getDefault());
    return tempCal.get(Calendar.DAY_OF_WEEK);
    }

    public static int weekNumber(Timestamp input, int startOfWeek) {
    Calendar calendar = Calendar.getInstance();
    calendar.setFirstDayOfWeek(startOfWeek);

    if (startOfWeek == Calendar.MONDAY) {
    calendar.setMinimalDaysInFirstWeek(4);
    } else if (startOfWeek == Calendar.SUNDAY) {
    calendar.setMinimalDaysInFirstWeek(3);
    }

    calendar.setTime(new java.util.Date(input.getTime()));
    return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    // ----- New methods that take a timezone and locale -- //

    public static Calendar getCalendarInstance(TimeZone timeZone, Locale locale) {
    return Calendar.getInstance(java.util.TimeZone.getTimeZone(timeZone.getID()), locale);
    }

    /**
    * Returns a Calendar object initialized to the specified date/time, time zone,
    * and locale.
    *
    * @param date date/time to use
    * @param timeZone
    * @param locale
    * @return Calendar object
    * @see java.util.Calendar
    */
    public static Calendar toCalendar(Date date, TimeZone timeZone, Locale locale) {
    Calendar cal = getCalendarInstance(timeZone, locale);
    if (date != null) {
    cal.setTime(date);
    }
    return cal;
    }

    /**
    * Perform date/time arithmetic on a Timestamp. This is the only accurate way to
    * perform date/time arithmetic across locales and time zones.
    *
    * @param stamp date/time to perform arithmetic on
    * @param adjType the adjustment type to perform. Use one of the java.util.Calendar fields.
    * @param adjQuantity the adjustment quantity.
    * @param timeZone
    * @param locale
    * @return adjusted Timestamp
    * @see java.util.Calendar
    */
    public static Timestamp adjustTimestamp(Timestamp stamp, int adjType, int adjQuantity, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.add(adjType, adjQuantity);
    return new Timestamp(tempCal.getTimeInMillis());
    }

    public static Timestamp adjustTimestamp(Timestamp stamp, Integer adjType, Integer adjQuantity) {
    Calendar tempCal = toCalendar(stamp);
    tempCal.add(adjType, adjQuantity);
    return new Timestamp(tempCal.getTimeInMillis());
    }

    public static Timestamp getDayStart(Timestamp stamp, TimeZone timeZone, Locale locale) {
    return getDayStart(stamp, 0, timeZone, locale);
    }

    public static Timestamp getDayStart(Timestamp stamp, int daysLater, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), tempCal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    tempCal.add(Calendar.DAY_OF_MONTH, daysLater);
    Timestamp retStamp = new Timestamp(tempCal.getTimeInMillis());
    retStamp.setNanos(0);
    return retStamp;
    }

    public static Timestamp getDayEnd(Timestamp stamp, TimeZone timeZone, Locale locale) {
    return getDayEnd(stamp, Long.valueOf(0), timeZone, locale);
    }

    public static Timestamp getDayEnd(Timestamp stamp, Long daysLater, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), tempCal.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
    tempCal.add(Calendar.DAY_OF_MONTH, daysLater.intValue());
    Timestamp retStamp = new Timestamp(tempCal.getTimeInMillis());
    retStamp.setNanos(0);
    //MSSQL datetime field has accuracy of 3 milliseconds and setting the nano seconds cause the date to be rounded to next day
    //retStamp.setNanos(999999999);
    return retStamp;
    }

    public static Timestamp getWeekStart(Timestamp stamp, TimeZone timeZone, Locale locale) {
    return getWeekStart(stamp, 0, 0, timeZone, locale);
    }

    public static Timestamp getWeekStart(Timestamp stamp, int daysLater, TimeZone timeZone, Locale locale) {
    return getWeekStart(stamp, daysLater, 0, timeZone, locale);
    }

    public static Timestamp getWeekStart(Timestamp stamp, int daysLater, int weeksLater, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), tempCal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    tempCal.add(Calendar.DAY_OF_MONTH, daysLater);
    tempCal.set(Calendar.DAY_OF_WEEK, tempCal.getFirstDayOfWeek());
    tempCal.add(Calendar.WEEK_OF_MONTH, weeksLater);
    Timestamp retStamp = new Timestamp(tempCal.getTimeInMillis());
    retStamp.setNanos(0);
    return retStamp;
    }

    public static Timestamp getWeekEnd(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Timestamp weekStart = getWeekStart(stamp, timeZone, locale);
    Calendar tempCal = toCalendar(weekStart, timeZone, locale);
    tempCal.add(Calendar.DAY_OF_MONTH, 6);
    return getDayEnd(new Timestamp(tempCal.getTimeInMillis()), timeZone, locale);
    }

    public static Timestamp getMonthStart(Timestamp stamp, TimeZone timeZone, Locale locale) {
    return getMonthStart(stamp, 0, 0, timeZone, locale);
    }

    public static Timestamp getMonthStart(Timestamp stamp, int daysLater, TimeZone timeZone, Locale locale) {
    return getMonthStart(stamp, daysLater, 0, timeZone, locale);
    }

    public static Timestamp getMonthStart(Timestamp stamp, int daysLater, int monthsLater, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), 1, 0, 0, 0);
    tempCal.add(Calendar.MONTH, monthsLater);
    tempCal.add(Calendar.DAY_OF_MONTH, daysLater);
    Timestamp retStamp = new Timestamp(tempCal.getTimeInMillis());
    retStamp.setNanos(0);
    return retStamp;
    }

    public static Timestamp getMonthEnd(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), tempCal.getActualMaximum(Calendar.DAY_OF_MONTH), 0, 0, 0);
    return getDayEnd(new Timestamp(tempCal.getTimeInMillis()), timeZone, locale);
    }

    public static Timestamp getYearStart(Timestamp stamp, TimeZone timeZone, Locale locale) {
    return getYearStart(stamp, 0, 0, 0, timeZone, locale);
    }

    public static Timestamp getYearStart(Timestamp stamp, int daysLater, TimeZone timeZone, Locale locale) {
    return getYearStart(stamp, daysLater, 0, 0, timeZone, locale);
    }

    public static Timestamp getYearStart(Timestamp stamp, int daysLater, int yearsLater, TimeZone timeZone, Locale locale) {
    return getYearStart(stamp, daysLater, 0, yearsLater, timeZone, locale);
    }

    public static Timestamp getYearStart(Timestamp stamp, Number daysLater, Number monthsLater, Number yearsLater, TimeZone timeZone, Locale locale) {
    return getYearStart(stamp, (daysLater == null ? 0 : daysLater.intValue()),
    (monthsLater == null ? 0 : monthsLater.intValue()), (yearsLater == null ? 0 : yearsLater.intValue()), timeZone, locale);
    }

    public static Timestamp getYearStart(Timestamp stamp, int daysLater, int monthsLater, int yearsLater, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), Calendar.JANUARY, 1, 0, 0, 0);
    tempCal.add(Calendar.YEAR, yearsLater);
    tempCal.add(Calendar.MONTH, monthsLater);
    tempCal.add(Calendar.DAY_OF_MONTH, daysLater);
    Timestamp retStamp = new Timestamp(tempCal.getTimeInMillis());
    retStamp.setNanos(0);
    return retStamp;
    }

    public static Timestamp getYearEnd(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    tempCal.set(tempCal.get(Calendar.YEAR), tempCal.getActualMaximum(Calendar.MONTH) + 1, 0, 0, 0, 0);
    return getMonthEnd(new Timestamp(tempCal.getTimeInMillis()), timeZone, locale);
    }

    public static int weekNumber(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar tempCal = toCalendar(stamp, timeZone, locale);
    return tempCal.get(Calendar.WEEK_OF_YEAR);
    }

    /**
    * Returns a List of day name Strings - suitable for calendar headings.
    * @param locale
    * @return List of day name Strings
    */
    public static List<String> getDayNames(Locale locale) {
    Calendar tempCal = Calendar.getInstance(locale);
    tempCal.set(Calendar.DAY_OF_WEEK, tempCal.getFirstDayOfWeek());
    SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE", locale);
    List<String> resultList = new ArrayList<String>();
    for (int i = 0; i < 7; i++) {
    resultList.add(dateFormat.format(tempCal.getTime()));
    tempCal.roll(Calendar.DAY_OF_WEEK, 1);
    }
    return resultList;
    }

    /**
    * Returns a List of month name Strings - suitable for calendar headings.
    *
    * @param locale
    * @return List of month name Strings
    */
    public static List<String> getMonthNames(Locale locale) {
    Calendar tempCal = Calendar.getInstance(locale);
    tempCal.set(Calendar.MONTH, Calendar.JANUARY);
    SimpleDateFormat dateFormat = new SimpleDateFormat("MMMM", locale);
    List<String> resultList = new ArrayList<String>();
    for (int i = Calendar.JANUARY; i <= tempCal.getActualMaximum(Calendar.MONTH); i++) {
    resultList.add(dateFormat.format(tempCal.getTime()));
    tempCal.roll(Calendar.MONTH, 1);
    }
    return resultList;
    }

    /**
    * Returns an initialized DateFormat object.
    *
    * @param dateFormat
    * optional format string
    * @param tz
    * @param locale
    * can be null if dateFormat is not null
    * @return DateFormat object
    */
    public static DateFormat toDateFormat(String dateFormat, TimeZone tz, Locale locale) {
    DateFormat df = null;
    if (UtilValidate.isEmpty(dateFormat)) {
    df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    } else {
    df = new SimpleDateFormat(dateFormat);
    }
    df.setTimeZone(tz);
    return df;
    }

    /**
    * Returns an initialized DateFormat object.
    * @param dateTimeFormat optional format string
    * @param tz
    * @param locale can be null if dateTimeFormat is not null
    * @return DateFormat object
    */
    public static DateFormat toDateTimeFormat(String dateTimeFormat, TimeZone tz, Locale locale) {
    DateFormat df = null;
    if (UtilValidate.isEmpty(dateTimeFormat)) {
    // default df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);
    df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
    } else {
    df = new SimpleDateFormat(dateTimeFormat);
    }
    df.setTimeZone(tz);
    return df;
    }

    /**
    * Returns an initialized DateFormat object.
    * @param timeFormat optional format string
    * @param tz
    * @param locale can be null if timeFormat is not null
    * @return DateFormat object
    */
    public static DateFormat toTimeFormat(String timeFormat, TimeZone tz, Locale locale) {
    DateFormat df = null;
    if (UtilValidate.isEmpty(timeFormat)) {
    df = DateFormat.getTimeInstance(DateFormat.MEDIUM, locale);
    } else {
    df = new SimpleDateFormat(timeFormat);
    }
    df.setTimeZone(tz);
    return df;
    }

    /**
    * Localized String to Timestamp conversion. To be used in tandem with timeStampToString().
    */
    public static Timestamp stringToTimeStamp(String dateTimeString, TimeZone tz, Locale locale) throws ParseException {
    return stringToTimeStamp(dateTimeString, null, tz, locale);
    }

    /**
    * Localized String to Timestamp conversion. To be used in tandem with timeStampToString().
    */
    public static Timestamp stringToTimeStamp(String dateTimeString, String dateTimeFormat, TimeZone tz, Locale locale) throws ParseException {
    DateFormat dateFormat = toDateTimeFormat(dateTimeFormat, tz, locale);
    Date parsedDate = dateFormat.parse(dateTimeString);
    return new Timestamp(parsedDate.getTime());
    }

    /**
    * Localized Timestamp to String conversion. To be used in tandem with stringToTimeStamp().
    */
    public static String timeStampToString(Timestamp stamp, TimeZone tz, Locale locale) {
    return timeStampToString(stamp, null, tz, locale);
    }

    /**
    * Localized Timestamp to String conversion. To be used in tandem with stringToTimeStamp().
    */
    public static String timeStampToString(Timestamp stamp, String dateTimeFormat, TimeZone tz, Locale locale) {
    DateFormat dateFormat = toDateTimeFormat(dateTimeFormat, tz, locale);
    dateFormat.setTimeZone(tz);
    return dateFormat.format(stamp);
    }

    /** Returns a TimeZone object based upon a time zone ID. Method defaults to
    * server's time zone if tzID is null or empty.
    * @see java.util.TimeZone
    */
    public static TimeZone toTimeZone(String tzId) {
    if (UtilValidate.isEmpty(tzId)) {
    return TimeZone.getDefault();
    } else {
    return TimeZone.getTimeZone(tzId);
    }
    }

    /** Returns a TimeZone object based upon an hour offset from GMT.
    * @see java.util.TimeZone
    */
    public static TimeZone toTimeZone(int gmtOffset) {
    if (gmtOffset > 12 || gmtOffset < -14) {
    throw new IllegalArgumentException("Invalid GMT offset");
    }
    String tzId = gmtOffset > 0 ? "Etc/GMT+" : "Etc/GMT";
    return TimeZone.getTimeZone(tzId + gmtOffset);
    }

    public static int getSecond(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.SECOND);
    }

    public static int getMinute(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.MINUTE);
    }

    public static int getHour(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.HOUR_OF_DAY);
    }

    public static int getDayOfWeek(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.DAY_OF_WEEK);
    }

    public static int getDayOfMonth(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.DAY_OF_MONTH);
    }

    public static int getDayOfYear(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.DAY_OF_YEAR);
    }

    public static int getWeek(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.WEEK_OF_YEAR);
    }

    public static int getMonth(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.MONTH);
    }

    public static int getYear(Timestamp stamp, TimeZone timeZone, Locale locale) {
    Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
    return cal.get(Calendar.YEAR);
    }

    public static Date getEarliestDate() {
    Calendar cal = getCalendarInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault());
    cal.set(Calendar.YEAR, cal.getActualMinimum(Calendar.YEAR));
    cal.set(Calendar.MONTH, cal.getActualMinimum(Calendar.MONTH));
    cal.set(Calendar.DAY_OF_MONTH, 1);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
    }

    public static Date getLatestDate() {
    Calendar cal = getCalendarInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault());
    cal.set(Calendar.YEAR, cal.getActualMaximum(Calendar.YEAR));
    cal.set(Calendar.MONTH, cal.getActualMaximum(Calendar.MONTH));
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    cal.set(Calendar.HOUR_OF_DAY, 23);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.SECOND, 59);
    cal.set(Calendar.MILLISECOND, 999);
    return cal.getTime();
    }
    //用于在退发票的form中只显示日期
    public static String getDate(Timestamp dateTime){
    String localTime = dateTime.toString();
    return localTime.substring(0, 11);

    }
    }

  • 相关阅读:
    0 Explore TreeView
    按钮颜色选择器
    颜色组合框
    Get Files from Directory
    05.0 图片
    WINAPI 变量(2861个)
    为字符串增加50个空格
    让DataGridView显示行号
    相对路径
    SpecialFolder
  • 原文地址:https://www.cnblogs.com/songyunxinQQ529616136/p/6593030.html
Copyright © 2011-2022 走看看