在编程中,经常需要对日期和时间进行操作,这篇文章就介绍下常用的日期操作方法及其相关的类。
Date
Java 中的时间是通过 Date 表示,是表示距离 「1970/01/01 00:00:00」 的毫秒数,java.util.Date 类封装了日期及时间信息。
Date 类中的大多数进行时间计算的方法都已经被 Calendar 取代。
Date 的三个常用方法:一个构造方法 Date(),和两个(幸存下来的方法,哈哈)方法 getTime() 和 setTime()。
Date date = new Date();//创建对象并获取当前时间
//获取自 1970 01 01 00:00:00 到 date 时间(这里为当前时间)的毫秒数
long time = date.getTime();
//设置明天此时此刻的日期和时间。
time += 24*60*60*1000;
date.setTime(time);//设置时间
System.out.println(date);//输出类似 Sun Mar 18 18:17:25 CST 2017 的时间
## SimplaDateFormat ## 由于 Date 输出的时间格式并不是很容易看懂,所以这时候可以使用 SimplaDateFormat。java.text.SimpleDateFormat 是一个用来格式化话解析日期的类,允许我们按照一个指定的日期格式,在 String 与 Date 类型之间互换:
- **format(Date date)**:将 Date 类型转换为 String 类型,返回值为 String 类型。
- **Date parse(String str)**:将 String 类型的时间转换为 Date 类型,返回值为 Date 类型。
转换前提是需要指定格式,日期模式匹配字符:
字符 | 含义 | 示例 |
---|---|---|
y | 年 | yyyy → 2017 或 yy → 17 |
M | 月 | MM → 03 或 M → 3 |
d | 日 | dd → 16 |
m | 分 | mm → 37 |
s | 秒 | ss → 59 |
a | AM 或 PM | |
H | 时(24) | HH:mm:ss → 12:24:39 |
h | 时(12) | hh:mm:ss → 9:47:49 |
将 Date 转换为 String 类型示例:
Date now = new Date();//获取当前时间
System.out.println(now);//输出 Sat Mar 16 18:27:13 CST 2017
//将 Date 类型的数据按照指定格式转换为 String 类型的数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(now));//输出 2017-03-16 18:27:13
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH.mm.ss");
System.out.println(sdf.format(now));//输出 2017/03/18 18.27.13
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM/dd hh:mm.ss");
System.out.println(sdf.format(now));//输出 17-03/18 06:27.13
将 String 转换为 Date 类型演示:
String time = "2002-02-22 22:22:22";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式需要与待转换的 String 格式相同
Date date;
try {
date = sdf.parse(time);//有可能抛出异常,所以需要使用 try/catch 来捕有可能发生的异常
System.out.println(date);
//这里为 1970 01 01 00:00:00 到 2002-02-22 22:22:22 的毫秒数
System.out.println(date.getTime());
} catch (Exception e) {
e.printStackTrace()
}
将 String 转换为 Date 类型时,SimpleDateFormat 指定的格式需要与待转换的 String 时间格式相同
## Calendar ## java.util.Calendar 封装了日历信息。主要作用在于其方法可以对时间进行计算。
Calender 是抽象类,规定了操作时间的相关方法。
常用的子类:GregorianCalendar 即阴历历法。
Calender 提供了一个静态方法 getInstance(),可以获取一个当前系统所在地区适用的 Calendar 实例。
Calendar c = Calendar.getInstance();//获取当前系统所在时区的 Calendar 实例,默认为当前时间
**getTime() 方法**:获取 Date 类型的时间,返回值为 Date 类型。
Date d = c.getTime();
**set(int field, int value) 方法**:设置日期及时间分量,该方法没有返回值:
c.set(Calendar.YEAR, 2008);//设置年份
c.set(Calendar.MONTH, Calendar.AUGUST);//月从 0 开始,为了防止混淆,建议使用内部常量表示
c.set(Calendar.DAY_OF_MONTH, 8);//设置月中的第几天
c.set(Calendar.HOUR_OF_DAY, 20);//设置小时
c.set(Calendar.MINUTE, 8);//设置分钟
c.set(Calendar.SECOND, 8);//设置秒
d = c.getTime();
System.out.println(d);//输出 Fri Aug 08 20:08:08 CST 2008
**get(int field) 方法**:获取日期的时间分量,返回 int 类型:
int year = c.get(Calendar.YEAR);
//Calender 中的月是从 0 开始,所以想要表示真实的月份需要加 1
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DAY_OF_MONTH);
//Calendar 中的每星期的第一天是周日,所以想表示中国的星期需要减 1
int week = c.get(Calendar.DAY_OF_WEEK) - 1;
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + " 星期" + week);//输出 2017-3-16 19:22:11 星期 4
重要的事要多强调!
Calender 中的月是从 0 开始,所以想要表示真实的月份需要加 1
Calendar 星期中的第一天是周日,所以想表示中国的星期需要减 1