/* * Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software;Designed and Developed mainly by many Chinese * opensource volunteers. you can redistribute it and/or modify it under the * terms of the GNU General Public License version 2 only, as published by the * Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Any questions about this component can be directed to it's project Web address * https://code.google.com/p/opencloudb/. * */ package org.hx.rainbow.common.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; /** * 日期操作工具类 * * @author hx * */ public class DateUtil { /** * 默认日期格式:yyyy-MM-dd */ public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd"; /** * 默认时间格式:yyyy-MM-dd HH:mm:ss */ public static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * 默认时间戳格式,到毫秒 yyyy-MM-dd HH:mm:ss SSS */ public static final String DEFAULT_DATEDETAIL_PATTERN = "yyyy-MM-dd HH:mm:ss SSS"; /** * 1天折算成毫秒数 */ public static final long MILLIS_A_DAY = 24 * 3600 * 1000; private static HashMap<String,Object> parsers = new HashMap<String,Object>(); private static SimpleDateFormat getDateParser(String pattern) { Object parser = parsers.get(pattern); if (parser == null) { parser = new SimpleDateFormat(pattern); parsers.put(pattern, parser); } return (SimpleDateFormat) parser; } /** * 取得系统当前年份 * @return */ public static int currentYear() { java.util.Calendar c = java.util.Calendar.getInstance(); return c.get(java.util.Calendar.YEAR); } /** * 取得当前系统日期 * * @return */ public static java.util.Date currentDate() { return new java.util.Date(); } /** * 取得系统当前日期,返回默认日期格式的字符串。 * * @param strFormat * @return */ public static String nowDate(String strFormat) { java.util.Date date = new java.util.Date(); return getDateParser(strFormat).format(date); } /** * 取得当前系统时间戳 * * @return */ public static Timestamp currentTimestamp() { return new Timestamp(new Date().getTime()); } /** * 将日期字符串转换为java.util.Date对象 * * @param dateString * @param pattern * 日期格式 * @return * @throws Exception */ public static java.util.Date toDate(String dateString, String pattern) throws Exception { return getDateParser(pattern).parse(dateString); } /** * 将日期字符串转换为java.util.Date对象,使用默认日期格式 * * @param dateString * @return * @throws Exception */ public static java.util.Date toDate(String dateString) throws Exception { return getDateParser(DEFAULT_DATE_PATTERN).parse(dateString); } /** * 将时间字符串转换为java.util.Date对象 * @param dateString * @return * @throws Exception */ public static java.util.Date toDateTime(String dateString) throws Exception { return getDateParser(DEFAULT_DATETIME_PATTERN).parse(dateString); } /** * 将java.util.Date对象转换为字符串 * @param date * @param pattern * @return */ public static String toDateString(java.util.Date date, String pattern) { return getDateParser(pattern).format(date); } /** * 将java.util.Date对象转换为字符串,使用默认日期格式 * @param date * @param pattern * @return */ public static String toDateString(java.util.Date date) { return getDateParser(DEFAULT_DATE_PATTERN).format(date); } /** * 将java.util.Date对象转换为时间字符串,使用默认日期格式 * @param date * @return */ public static String toDateTimeString(java.util.Date date) { return getDateParser(DEFAULT_DATETIME_PATTERN).format(date); } /** * 日期相减 * @param date * @param day * @return */ public static Date diffDate(java.util.Date date, int day) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTimeInMillis(getMillis(date) - ((long) day) * MILLIS_A_DAY ); return c.getTime(); } /** * 返回毫秒 * * @param date * 日期 * @return 返回毫秒 * @author doumingjun create 2007-04-07 */ public static long getMillis(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.getTimeInMillis(); } /** * 日期相加 * * @param date * 日期 * @param day * 天数 * @return 返回相加后的日期 * @author doumingjun create 2007-04-07 */ public static java.util.Date addDate(java.util.Date date, int day) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTimeInMillis(getMillis(date) + ((long) day) * MILLIS_A_DAY); return c.getTime(); } /** * 日期增加年数 * @param date * @param year * @return * @author zhf */ public static Date addYear(Date date , int year){ Calendar calender = Calendar.getInstance(); calender.setTime(date); calender.add(Calendar.YEAR, year); return calender.getTime(); } /** * 日期增加月数 * @param date * @param year * @return * @author zhf */ public static Date addMonth(Date date , int month){ Calendar calender = Calendar.getInstance(); calender.setTime(date); calender.add(Calendar.MONTH, month); return calender.getTime(); } /** * 根据季度获得相应的月份 * * @param quarters 季度 * * @return 返回相应的月份 */ public static String getMonth(String quarters) { String month; int m = Integer.parseInt(quarters); m = m * 3 - 2; if (m > 0 && m < 10) { month = "0" + String.valueOf(m); } else { month = String.valueOf(m); } return month; } /** * 根据月份获得相应的季度 * * @param month 月份 * * @return 返回相应的季度 */ public static String getQuarters(String month) { String quarters = null; int m = Integer.parseInt(month); if (m == 1 || m == 2 || m == 3) { quarters = "1"; } if (m == 4 || m == 5 || m == 6) { quarters = "2"; } if (m == 7 || m == 8 || m == 9) { quarters = "3"; } if (m == 10 || m == 11 || m == 12) { quarters = "4"; } return quarters; } /** * 获取日期所在星期的第一天,这里设置第一天为星期日 * @param datestr * @return */ public static String getFirstDateOfWeek(String datestr){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); try { Date date=sdf.parse(datestr); Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//这里设置从周日开始 return sdf.format(cal.getTime()); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 获取日期所在当年的第几周 * @param datestr * @return */ public static int getWeekOfYear(String datestr){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); try { Date date=sdf.parse(datestr); Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.WEEK_OF_YEAR); } catch (ParseException e) { e.printStackTrace(); } return -1; } @SuppressWarnings("deprecation") public static String getWeekday(String datestr){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); try { Date date=sdf.parse(datestr); switch (date.getDay()) { case 1: return "星期一"; case 2: return "星期二"; case 3: return "星期三"; case 4: return "星期四"; case 5: return "星期五"; case 6: return "星期六"; default: return "星期天"; } } catch (ParseException e) { e.printStackTrace(); } return null; } public static Date getDate(Object object) { Date date = null; try { SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd hh:mm"); SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd"); if (object instanceof String) { try { date = format.parse((String) object); } catch (Exception e) { try { date = format2.parse((String) object); } catch (Exception ee) { date = format3.parse((String) object); } } } else if (object instanceof java.util.Date) { date = (Date) object; } else if (object instanceof Timestamp) { date = (Date) object; } else { date = new java.util.Date(); } } catch (Exception e) { e.printStackTrace(); } return date; } }