package com.jxdinfo.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @Copyright @ 2008
* All right reserved
* @version 创建时间:Created on Feb 27, 2008
* @author 作者:Create by zhen
* @Email:
[email protected] * @QQ: 275159177
* @description 类说明
*
*/
public class DateUtil {
/**
* 得到两个日期间的年数
* @param from
* @param to
* @return
*/
@SuppressWarnings("static-access")
public static int coutYear(Date from,Date to){
Calendar calendar = Calendar.getInstance();
calendar.setTime(to);
int toYear = calendar.get(Calendar.YEAR);
calendar.setTime(from);
int fromYear = calendar.get(Calendar.YEAR);
return Math.abs(toYear - fromYear);
}
/**
* 得到系统当前日期的字符串表示,默认格式为(yyyy-MM-dd)
* @return 当前系统日期
*/
public static String nowDate(String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date());
}
/**
* 得到指定日期指定格式的字符串表示。
* @param date 日期
* @param format 格式
* @return 指定格式的字符串日期
*/
public static String dateToString(Date date,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
if(date==null){
date = new Date();
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 得到默认格式(yyyy-MM-dd)的当前日期的字符串表示
* @return 系统当前日期
*/
public static String nowDate(){
return nowDate(null);
}
/**
* 得到系统去年今天的日期
* @return 返回指定格式的字符串日期
*/
public static String previousYearNowDate(String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)-1);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到系统去年今天的日期
* @return 返回默认格式的字符串日期
*/
public static String previousYearNowDate(){
return previousYearNowDate(null);
}
/**
* 得到系统去年今天的日期
* @return Date 返回类型为日期类型 java.util.Date;
*/
public static Date previousYearNowDate_Date(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)-1);
return calendar.getTime();
}
/**
* 得到系统今年今天的日期
* @return 返回类型为指定格式的字符串
*/
public static String nextYearNowDate(String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+1);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到系统今年今天的日期
* @return 返回类型为默认格式的字符串
*/
public static String nextYearNowDate(){
return nextYearNowDate(null);
}
/**
* 得到系统今年今天的日期
* @return 返回类型为日期类型java.util.Date;
*/
public static Date nextYearNowDate_Date(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+1);
return calendar.getTime();
}
/**
* 得到系统指定年份今天的日期
* @return 返回类型为日期类型java.util.Date;
*/
public static Date dateOfAccordYear(int year){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
return calendar.getTime();
}
/**
* 得到指定偏移量的年份的今天的日期
* @param offset 偏移量,为正数向后数,为正数向前数。
* @param format 指定日期格式
* @return 返回类型为默认格式的字符串
*/
public static String dateOfAccordYear_String(int offset,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+offset);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到默认格式指定偏移量的年份的今天的日期
* @param offset 偏移量,为正数向后数,为正数向前数。
* @return 返回类型为默认格式的字符串
*/
public static String dateOfAccordYear_String(int offset){
return dateOfAccordYear_String(offset,null);
}
/**
* 得到指定偏移量的年份的今天的日期
* @param offset 偏移量,为正数向后数,为正数向前数。
* @return 返回类型为日期类型java.util.Date;
*/
public static Date dateOfAccordYear_Date(int offset){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+offset);
return calendar.getTime();
}
/**
* 通过指定年得到指定年的第一天第一刻
* @param year 年
* @return 指定年的第一天第一刻
*/
public static Date firstDateOfYear_Date(Integer year){
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR), 0, 1, 0, 0, 0);
}else{
calendar.set(year, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 按照指定年份指定格式得到指定年的第一天第一刻字符串格式的日期
* @param year 年
* @param format 格式
* @return 指定格式字符串
*/
public static String firstDateOfYear_String(Integer year,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR), 0, 1, 0, 0, 0);
}else{
calendar.set(year, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到指定年份的最后一天的最后时刻
* @param year 年
* @return
*/
public static Date lastDateOfYear_Date(Integer year){
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR)+1, 0, 1, 0, 0, 0);
}else{
calendar.set(year+1, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
return new Date(calendar.getTime().getTime()-1);
}
/**
* 得到指定年份的最后一天的最后时刻
* @param year 年
* @param format 格式
* @return 指定格式字符串
*/
public static String lastDateOfYear_String(Integer year,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR)+1, 0, 1, 0, 0, 0);
}else{
calendar.set(year+1, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(calendar.getTime().getTime()-1));
}
/**
* 两个日期之间的天数
* @param from
* @param to
* @return
*/
public static int countDay(Date from,Date to){
Long length = to.getTime() - from.getTime();
int dayCount = (int) (length/60/60/1000/24);
return Math.abs(dayCount);
}
/**
* 得到一个日期月份的最大天数
* @param date
* @return
*/
public static int maxDateOfMonth(Date date){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
int maxDateOfMonth=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
return maxDateOfMonth;
}
/**
* 计算某一天是一年中的第几星期
* @param date
* @return
*/
public static int weekOfYear(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
return weekno;
}
/**
* 计算一年中的第几星期是几号
* @param year
* @param weekno
* @return
*/
public static Date weekOfFirstDate(int year,int weekno){
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weekno);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cal.getTime();
}
/**
* 计算一个日期加上或减去一定天数后的日期,
* 加一定的天数时传入的days是一个正数,
* 减去一定的天数时传入的days是一个负数。
* @param date 给定日期
* @param days 加入的天数
* @return 目标日期
*/
public static Date dateAddOrSubDays(Date date , int days){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days);
return cal.getTime();
}
/**
* 计算一个日期加上或减去一定月数后的日期,
* 加一定的月数时传入的months是一个正数,
* 减去一定的月数时传入的months是一个负数。
* @param date
* @param months
* @return
*/
public static Date dateAddOrSubMonths(Date date , int months){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, months);
return cal.getTime();
}
/**
* 计算某人在某年的年龄
* @param birthday
* @param year
* @return
*/
public static int countAge(Date birthday,int year){
Calendar cal=Calendar.getInstance();
cal.setTime(birthday);
cal.set(Calendar.YEAR, year);
if(cal.getTime().getTime()>birthday.getTime()){
return coutYear(birthday,cal.getTime());
}else{
return 0;
}
}
/**
* 返回指定日期的年份
* @param date
* @return
*/
public static int getYearFromDate(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR);
}
/**
* 返回指定日期的月份
* @param date
* @return
*/
public static int getMonthFromDate(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MONTH)+1;
}
/**
* 返回指定日期的日
* @param date
* @return
*/
public static int getDateFromDate(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DATE);
}
/**
*
* @param args
*/
public static void main(String[] args){
Calendar cal=Calendar.getInstance();
Date date= cal.getTime();
System.out.println(date);
System.out.println(dateAddOrSubMonths(date , 1000));
System.out.println(firstDateOfYear_Date(2009));
System.out.println(new Date(firstDateOfYear_Date(2009).getTime()-1));
System.out.println(lastDateOfYear_String(2009,null));
}
}