简介
在 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 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位数字,使用 |
M | 年中的月份,月份是2位数字,使用 |
d | 月中的天数,天数是2位数字,使用 |
H | 一天的小时数(24小时),小时是2位数字,使用 |
m | 小时中的分钟数,分钟是2位数字,使用 |
s | 分钟中的秒数,秒是2位数字,使用 |
S | 毫秒数,毫秒是3位数字,使用 |
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()));
}