简介

在 Java 对日期的操作提供了良好的支持,主要使用 java.util 包中的 Date、Calendar及 java.text 包中的 SimpleDateFormat 来实现。

使用 Date 类

类 Date(就是表示当前时间) 是一个较为简单的操作类,在使用中直接使用类 java.util.Date 的构造方法并进行输出。

在Data类里有如下重要方法:

  • 无参构造:public Data();
  • 有参构造:public Data(long date);
  • 转为long类型:public long getTime();
import java.util.Date;

public class DateTest {
	public static void main(String[] args) {
		long time = System.currentTimeMillis();
		Date date = new Date(time);		
		System.out.println(date.getTime()); // 1542887953663
	}
}

使用 Calendar 类

Calendar 类可以取得当前时间,并且可以做一些日期的加减。Calendar 类是一个抽象类,,Calender 的子类是 GregorianCalendar。

Calendar类中的常量

常量

类型

描述

public static final int YEAR

int

获取年

public static final int MONTH

int

获取月

public static final int DAY_OF_MONTH

int

获取日

public static final int HOUR_OF_DAY

int

获取小时,24小时制

public static final int MINUTE

int

获取分

public static final int SECOND

int

获取秒

public static final int MILLISECOND

int

获取毫秒

Calendar类中的提供的方法

方法

类型

描述

public static Calendar getInstance()

普通

根据默认的时区实例化对象

public boolean after(Object when)

普通

判断一个日期是在指定日期之后

public boolean before(Object when)

普通

判断一个日期是在指定日期之前

public int get(int field)

普通

返回给定日历字段值

public class CalendarDemo {
	public static void main(String[] args) throws Exception {
		Calendar cal = Calendar.getInstance();
		StringBuffer buf = new StringBuffer();
		buf.append(cal.get(Calendar.YEAR)).append("-");
		buf.append(cal.get(Calendar.MONTH) + 1).append("-");
		buf.append(cal.get(Calendar.DAY_OF_MONTH)).append(" ");
		buf.append(cal.get(Calendar.HOUR_OF_DAY)).append(":");
		buf.append(cal.get(Calendar.MINUTE)).append(":");
		buf.append(cal.get(Calendar.SECOND));
		System.out.println(buf);    // 2018-11-22 22:19:2
	}
}

使用 SimpleDateFormat 类

java.text 是一个专门实现国际化程序的开发包。 而 SimpleDateFormat 类是我们格式化日期的工具类可以将日期格式转化为另外一种格式(String 类型)。

日期格式化模版标记(注意大小写)

标记

描述

y

年,年份是4位数字,使用 yyyy 表示

M

年中的月份,月份是2位数字,使用 MM 表示

d

月中的天数,天数是2位数字,使用 dd 表示

H

一天的小时数(24小时),小时是2位数字,使用 HH 表示

m

小时中的分钟数,分钟是2位数字,使用 mm 表示

s

分钟中的秒数,秒是2位数字,使用 ss 表示

S

毫秒数,毫秒是3位数字,使用 SSS 表示

SimpleDateFormat有如下方法:

  • 构造方法:public SimpleDateFormat(String pattern) ;
  • 将Date转换为String:public final String format(Date date);
  • 将String转换为Date:public Date parse(String sourse) throws ParseException
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {

	public static void main(String[] args) throws ParseException {
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(sdf.format(date));	// 2018-11-22 21:10:40

		String str = "2018-05-07 14:50:20";
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date1 = sdf1.parse(str);
		System.out.println(date1);	// Mon May 07 14:50:20 CST 2018
	}
}

日期比较的方式

使用 date 的 before 和 after 方法

/**
  * @param date1
  * @param date2
  */
 public static void compareDate(Date date1, Date date2) {
     if (date1.before(date2)) {
         System.out.println(date1 + "在" + date2 + "前面");
     } else if (date1.after(date2)) {
         System.out.println(date1 + "在" + date2 + "后面");
     } else {
         System.out.println("是同一天的同一时间");
     }
 }

使用Date的getTime()方法

/**
  * @param date1
  * @param date2
  */
 public static void compareDateByGetTime(Date date1, Date date2) {
     if (date1.getTime() < date2.getTime()) {
         System.out.println(date1 + "在" + date2 + "前面");
     } else if (date1.getTime() > date2.getTime()) {
         System.out.println(date1 + "在" + date2 + "后面");
     } else {
         System.out.println("是同一天的同一时间");
     }
 }
/**
 * 日期比较
 */
public void compareDate(){
	//日期
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	String dateString_01 = "2017-01-01 11:11:11";
	String dateString_02 = "2016-01-02 11:11:11";
	
	try {
       Date date_01 = sdf.parse( dateString_01 );
       Date date_02 = sdf.parse( dateString_02 );
       
       System.out.println( date_01.before(date_02) ); //true,当 date_01 小于 date_02 时,为 true,否则为 false
       System.out.println( date_02.after(date_01) ); //true,当 date_02 大于 date_01 时,为 true,否则为 false
       
       System.out.println( date_01.compareTo(date_02) ); //-1,当 date_01 小于 date_02 时,为 -1
       System.out.println (date_02.compareTo(date_01) ); //1,当 date_02 大于 date_01 时,为 1
       System.out.println( date_02.compareTo(date_02) ); //0,当两个日期相等时,为 0
	       
	} catch (ParseException e) {
	   e.printStackTrace();
	}
}

计算日期相隔多少天

/**
 * 计算日期相隔多少天
 * @throws ParseException
 */
public void calculateDate() throws ParseException{
	SimpleDateFormat format  = new SimpleDateFormat("yyyy-MM-dd");
	Date beginDate= format.parse("2017-06-24");
	Date endDate= format.parse("2017-06-30");
	
	long day = ( endDate.getTime()-beginDate.getTime() )/(24*60*60*1000); 
	System.out.println(day);
}

日期加减法

/**
 * 日期的 加减法
 */
public void addDate(){
	DateFormat df = new SimpleDateFormat("yyyy-MM-dd EE hh:mm:ss");    
	Calendar c = Calendar.getInstance();	//获取当前日期的实例
	
	c.add(Calendar.MONTH, 1);	//当前时间加一个月
	//c.add(Calendar.MONTH, -1);	//当前时间减一个月
	System.out.println(df.format(c.getTime())); 	//格式化输出当前的时间
	
	c.add(Calendar.HOUR, 3); // 当前时间加 3个小时
	//c.add(Calendar.HOUR, -3); // 当前时间减 3个小时
	System.out.println(df.format(c.getTime())); 
	
	c.add(Calendar.YEAR, 1);	//当前时间加一年
	//c.add(Calendar.YEAR, -1);	//当前时间减一年
	System.out.println(df.format(c.getTime()));
	
	 c.add(Calendar.DAY_OF_WEEK, 7); // 当前时间加7天 
	 //c.add(Calendar.DAY_OF_WEEK, -7); // 当前时间减7天 
	 System.out.println(df.format(c.getTime()));
}