liujiaji 6397d906b5 src_app 移除
src_app_fresh 添加
2018-06-11 13:40:56 +08:00

376 lines
9.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.base.tool;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import com.amarsoft.are.ARE;
import com.amarsoft.are.lang.DateX;
/**
* 统一时间日期获取处理类<br/>
* 主要考虑统一获取日期,方便统一和外围系统联调及其他时间时,引起的取系统时间引起的不一致问题
* @author yangsong
* @since 2014/06/19
*/
public class DateTool {
public static final String AMR_NOMAL_DATE_FORMAT = "yyyy/MM/dd";
/**
* 获取当前日期yyyy/MM/dd格式
* @return
*/
public static String getCurDate(){
return getBaseDate().getDateString();
}
public static String getCurSeason(){
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH);
String returnValue = "";
switch((int)(month/3)){
case 0 : returnValue = "第一季度";
break;
case 1 : returnValue = "第二季度";
break;
case 2 : returnValue = "第三季度";
break;
case 3 : returnValue = "第四季度";
break;
}
return returnValue;
}
public static String getCurDateTime(){
return getBaseDate().getDateString("yyyy/MM/dd HH:mm:ss");
}
public static String getCurDateTime(String format){
return getBaseDate().getDateString(format);
}
/**
* 设置日期格式
* @return
*/
public static String dateFormat(String date){
DateX dateX = new DateX(date);
return dateX.getDateString("yyyy年MM月dd日");
}
/**
* 获取基础日期,
* @return
*/
public static DateX getBaseDate(){
DateX dateX = new DateX(new Date());
// DateX dateX = new DateX("2014/06/24 19:18:08");
return dateX;
}
public static final String INTERVAL_SEASON = "season";
public static final String INTERVAL_MONTH = "month";
/**
* 获取下一个间隔日期
* @param invervalType 间隔类型,如下个月,下个季度
* @param defaultDate 月内日期设定
* @return
*/
public static Date nextIntervalDate (String invervalType, int defaultDate){
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH);
int interval = 0;
if(invervalType.equals(INTERVAL_SEASON) ){
interval = (month/3+1)*3 - month;
}else if(invervalType.equals(INTERVAL_MONTH)){
interval=1;
}
cal.add(Calendar.MONTH, interval);
cal.set(Calendar.DATE, defaultDate);
//cal.roll(Calendar.DATE, defaultDate-1);
return cal.getTime();
}
/**
* 获取下一个间隔日期 返回字符串yyyy/MM/dd格式
* @param invervalType
* @param defaultDate
* @return
*/
public static String nextIntervalDateStr (String invervalType, int defaultDate){
DateX dateX = new DateX(nextIntervalDate(invervalType,defaultDate));
return dateX.getDateString();
}
/**
* 根据特定的月日,获取当前时间的下一个该日期
* @param defaultMonth
* @param defaultDate
* @return
*/
public static Date getNextDate(int defaultMonth , int defaultDate){
Calendar cal = Calendar.getInstance();
if(cal.get(Calendar.MONTH) +1 >defaultMonth ||
(cal.get(Calendar.MONTH) +1 ==defaultMonth && cal.get(Calendar.DATE)>=defaultDate)){
cal.add(Calendar.YEAR, 1);
}
cal.set(Calendar.MONTH, defaultMonth-1);
cal.set(Calendar.DATE, defaultDate);
return cal.getTime();
}
/**
* 根据特定的月日,获取当前时间的下一个该日期 返回字符串yyyy/MM/dd格式
* @param defaultMonth
* @param defaultDate
* @return
*/
public static String getNextDateString(int defaultMonth , int defaultDate){
DateX dateX = new DateX(getNextDate(defaultMonth,defaultDate));
return dateX.getDateString();
}
/**
* 根据年份,季度数获取日期区间
* 举例若当前时间2014/08/06
* 1.year=2014 seasonCount=2 则 区间为 2014/04/01 - 2014/08/06
* 2.year=2014 seasonCount=4 则 区间为 2013/10/01 - 2014/08/06
* 2.year=2013 seasonCount=2 则 区间为 2013/07/01 - 2013/12/31
* @param year
* @param seasonCount
* @return
*/
public static String[] getDateRange(int year ,int seasonCount){
String start="",end="";
Calendar cal = Calendar.getInstance();
int nowYear = cal.get(Calendar.YEAR);
if(nowYear>year){
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, 12);
cal.set(Calendar.DATE, 31);
}
end = new DateX(cal.getTime()).getDateString();
cal.add(Calendar.MONTH, -((seasonCount-1)*3+cal.get(Calendar.MONTH)%3));
cal.set(Calendar.DATE, 1);
start = new DateX(cal.getTime()).getDateString();
return new String[]{start,end};
}
/**
* 获取一年中的某一季度的日期范围
* @param year 年份
* @param season 该年中的季度1~4
* @return
*/
public static String[] getRangeForSeason(int year ,int season){
String start="",end="";
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, season*3-3);
cal.set(Calendar.DATE, 1);
start = new DateX(cal.getTime()).getDateString();
cal.set(Calendar.MONTH, season*3-1);
cal.set(Calendar.DATE, (season==1 ||season==4) ? 31:30);
end = new DateX(cal.getTime()).getDateString();
return new String[]{start,end};
}
/**
* 把日期类型转化成字符串类型
* @param date
* @param format 输出的字符串日期格式
* @return
*/
public static String parseDate2String(Date date, String format){
return DateX.format(date, format);
}
/**
* 把日期类型转化成字符串类型
* @param date
* @return
*/
public static String parseDate2String(Date date){
return DateX.format(date, AMR_NOMAL_DATE_FORMAT);
}
/**
* 获取当前日期的日历
* @param date
* @param format 输入的字符串日期格式
* @return
* @throws Exception
*/
public static Calendar getCalendar(String date, String format) {
Calendar cal = Calendar.getInstance();
cal.clear();
try {
cal.setTime(new SimpleDateFormat(format).parse(date));
} catch (ParseException e) {
ARE.getLog("输入日期的格式不正确!").error(e);
}
return cal;
}
/**
* 把字符串类型转化成日期类型
* @param date
* @param format 输入的字符串日期格式
* @return
* @throws ParseException
*/
public static Date parseString2Date(String date, String format) {
return getCalendar(date, format).getTime();
}
/**
* 把字符串类型转化成日期类型默认格式为yyyy/MM/dd
* @param date
* @return
* @throws ParseException
*/
public static Date parseString2Date(String date) {
return parseString2Date(date, AMR_NOMAL_DATE_FORMAT);
}
/**
* 按给定期限单位进行日期加减
* @param date
* @param year
* @param month
* @param day
* @param format
* @return
*/
public static String getRelativeDate(Date date, int year, int month, int day, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.add(1, year);
gc.add(2, month);
gc.add(5, day);
return sdf.format(gc.getTime());
}
/**
* 按给定期限单位进行日期加减
* @param date
* @param year
* @param month
* @param day
* @return
*/
public static String getRelativeDate(String date, int year, int month, int day) {
return getRelativeDate(parseString2Date(date), year, month, day, AMR_NOMAL_DATE_FORMAT);
}
/**
* 判断两个日期的大小
* @param dateFir
* @param dateSec
* @return
* 1 dateFir 晚于 dateSec
* -1 dateFir 早于 dateSec
* 0 dateFir 等于 dateSec
* @throws ParseException
*/
public static int compareDate(String dateFir, String dateSec){
Date date1d = parseString2Date(dateFir);
Date date2d = parseString2Date(dateSec);
if (date1d.after(date2d))
return 1;
if (date1d.before(date2d))
return -1;
else
return 0;
}
/**
* 根据日期获取星期几
* @param date
* @param type 1 返回数字 2 返回中文 3 返回英文
* @return
* @throws ParseException
*/
public static String getWeekDay(String date, String type){
String[] weekDates = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
String[] weekDatesE = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
Calendar cal = getCalendar(date, AMR_NOMAL_DATE_FORMAT);
if (type.equals("2"))
return weekDates[cal.get(Calendar.DAY_OF_WEEK) - 1];
else if (type.equals("3"))
return weekDatesE[cal.get(Calendar.DAY_OF_WEEK) - 1];
else
return String.valueOf(cal.get(Calendar.DAY_OF_WEEK) - 1);
}
/**
* 获取月末日期
* @param curDate
* @return
* @throws ParseException
*/
public static String getMonthLastDate(String curDate){
Calendar calendar = Calendar.getInstance();
calendar.setTime(parseString2Date(curDate));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return parseDate2String(calendar.getTime());
}
/**
* 获取季末日期
* @param curDate
* @return
* @throws ParseException
*/
public static String getSeasonLastDate(String curDate){
String months[] = {"03","06","09","12"};
Calendar cal = Calendar.getInstance();
cal.setTime(parseString2Date(curDate));
int dateMonth = cal.get(Calendar.MONTH);
int dateYear = cal.get(Calendar.YEAR);
String lastMonth = "";
switch((int)(dateMonth/3)){
case 0 : lastMonth = months[0];
break;
case 1 : lastMonth = months[1];
break;
case 2 : lastMonth = months[2];
break;
case 3 : lastMonth = months[3];
break;
}
String newDate = dateYear+"/"+lastMonth+"/01";
return getMonthLastDate(newDate);
}
/**
* 获取季初日期
* @param curDate
* @return
* @throws ParseException
*/
public static String getSeasonBeginDate(String curDate){
String months[] = {"01","04","07","10"};
Calendar cal = Calendar.getInstance();
cal.setTime(parseString2Date(curDate));
int dateMonth = cal.get(Calendar.MONTH);
int dateYear = cal.get(Calendar.YEAR);
String lastMonth = "";
switch((int)(dateMonth/3)){
case 0 : lastMonth = months[0];
break;
case 1 : lastMonth = months[1];
break;
case 2 : lastMonth = months[2];
break;
case 3 : lastMonth = months[3];
break;
}
String newDate = dateYear+"/"+lastMonth+"/01";
return newDate;
}
}