Java中日期时间操作

2017.12.2 java

1.Java中一个指定日期加上指定天数得到新日期

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {

	public static void main(String[] args) throws ParseException {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 日期格式
		Date date = dateFormat.parse("2015-07-31"); // 指定日期
		Date newDate = addDate(date, 20); // 指定日期加上20天
		System.out.println(dateFormat.format(date));// 输出格式化后的日期
		System.out.println(dateFormat.format(newDate));
	}

	public static Date addDate(Date date, long day) throws ParseException {
		long time = date.getTime(); // 得到指定日期的毫秒数
		day = day * 24 * 60 * 60 * 1000; // 要加上的天数转换成毫秒数
		time += day; // 相加得到新的毫秒数
		return new Date(time); // 将毫秒数转换成日期
	}
}

2.java创建Timestamp的几种方式

Timestamp time1 = new Timestamp(System.currentTimeMillis());  
  
Timestamp time2 = new Timestamp(new Date().getTime());  
  
Timestamp time3 = new Timestamp(Calendar.getInstance().getTimeInMillis());  
  
//不建议使用  
Timestamp time4 = new Timestamp(2011-1900,11,11,11,11,11,0); 

3.Date.compareTo

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
  
public class Date_compareTo
{
    public static void main(String[] args) throws Exception {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date = formatter.parse("2015-12-30");
        Calendar cal = Calendar.getInstance();
        cal.clear();
        cal.set(2016, 0, 1);
        Date date2 = cal.getTime();
        int compareTo = date.compareTo(date2);
        System.out.println("compareTo : " + compareTo);
    }
}

4.获取某年某月的第一天和最后一天

public static String getFirstDayOfMonth(int year, int month) {
	Calendar cal = Calendar.getInstance();
	cal.set(Calendar.YEAR, year);
	cal.set(Calendar.MONTH, month - 1);
	cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE));
	return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}

public static String getLastDayOfMonth(int year, int month) {
	Calendar cal = Calendar.getInstance();
	cal.set(Calendar.YEAR, year);
	cal.set(Calendar.MONTH, month - 1);
	cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
	return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}

或者

/** 
 * 获取月份最后一天.
 * @param year
 * @param month
 * @return
 */
public static Date getLastDayOfMonth(int year, int month) {
	Calendar calendar = Calendar.getInstance();
	calendar.set(Calendar.YEAR, year);
	calendar.set(Calendar.MONTH, month);
	calendar.set(Calendar.DAY_OF_MONTH, 1);
	calendar.add(Calendar.DAY_OF_MONTH, -1);
	return calendar.getTime();
}

/**
 * 获取月份最后一天.
 * @param year
 * @param month
 * @return
 */
public static String getLastDayOfMonthStr(int year, int month) {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	return sdf.format(getLastDayOfMonth(year, month));
}

5.Java判断一个时间是否在时间区间内

/**
 * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
 * 
 * @param nowTime 当前时间
 * @param startTime 开始时间
 * @param endTime 结束时间
 * @return
 * @author jqlin
 */
public static boolean isInvalidDate(Date nowTime, Date startTime, Date endTime) {
	if (nowTime.getTime() == startTime.getTime() || nowTime.getTime() == endTime.getTime()) {
		return true;
	}

	Calendar date = Calendar.getInstance();
	date.setTime(nowTime);

	Calendar begin = Calendar.getInstance();
	begin.setTime(startTime);

	Calendar end = Calendar.getInstance();
	end.setTime(endTime);

	if (date.after(begin) && date.before(end)) {
		return true;
	} else {
		return false;
	}
}

6.Calendar生成的当前日期会出现毫秒问题

Calendar today = Calendar.getInstance();
today.set(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
如果这样生成今天的日期,会出现毫秒问题,导致和别的日期比较出现偏差,需要加上毫秒设置
today.set(Calendar.MILLISECOND, 0);

7.java判断2个时间相差多少天、多少小时、多少分

/**
 * 判断2个时间相差多少天、多少小时、多少分<br>
 * <br>
 * @param pBeginTime 请假开始时间<br>
 * @param pEndTime 请假结束时间<br>
 * @return String 计算结果<br>
 * @Exception 发生异常<br>
*/
 public static String TimeDiff(String pBeginTime, String pEndTime) throws Exception {
  format = new SimpleDateFormat("yyyy-MM-dd hh:mm");
  Long beginL = format.parse(pBeginTime).getTime();
  Long endL = format.parse(pEndTime).getTime();
  Long day = (endL - beginL)/86400000;
  Long hour = ((endL - beginL)%86400000)/3600000;
  Long min = ((endL - beginL)%86400000%3600000)/60000;
  return ("实际请假" + day + "小时" + hour + "分钟" + min);
 }

更新列表:

参考文章:

相关阅读