Java中的日期时间操作——Date类和SimpleDateFormat类的使用
Java中对日期和时间有着丰富的支持,其中两个最常用的类分别是Date和SimpleDateFormat。本文将介绍Java中Date和SimpleDateFormat类的使用及相关操作。
一、Date类
Date类表示日期和时间。它的构造函数有多种形式:
public Date() public Date(long date)
其中,无参数构造函数表示当前日期和时间;带一个参数的构造函数表示从1970年1月1日0时0分0秒开始经过指定毫秒数的日期和时间。
我们可以通过以下方法获取Date对象的各个部分:
public int getYear() // 获取年份(从1900年开始,需要加上1900) public int getMonth() // 获取月份(0-11,需要加上1) public int getDate() // 获取日(1-31) public int getDay() // 获取星期(0-6,0表示星期日) public int getHours() // 获取小时(0-23) public int getMinutes() // 获取分钟(0-59) public int getSeconds() // 获取秒钟(0-59)
除了获取各个部分的方法外,还有以下方法:
public long getTime() // 返回该Date对象表示的毫秒数
我们可以用Date类的对象表示日期和时间,然后利用SimpleDateFormat类将其转化为指定格式的字符串。
二、SimpleDateFormat类
SimpleDateFormat类是用来格式化和解析日期和时间的类。它的构造函数有多个形式,其中最常用的如下:
public SimpleDateFormat(String pattern) // 创建指定格式的SimpleDateFormat对象 public SimpleDateFormat(String pattern, Locale locale) // 创建指定格式及区域设置的SimpleDateFormat对象
其中,pattern表示日期和时间格式的模式字符串,Locale表示区域设置,可以为空。
SimpleDateFormat类中的方法主要有两种:格式化和解析。
1. 格式化
格式化就是将Date对象转化为指定格式的字符串,使用format()方法实现。
public String format(Date date)
例如:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = format.format(new Date());
System.out.println(str);
输出结果为:“2022-01-02 09:10:30”。
2. 解析
解析就是将字符串转化为Date对象,使用parse()方法实现。
public Date parse(String source)
例如:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2022-01-02");
System.out.println(date);
输出结果为“Sun Jan 02 00:00:00 CST 2022”。
三、常见日期时间格式模式字符串
SimpleDateFormat类可以自定义日期时间格式,也可以使用Java定义好的日期时间格式模式字符串,常用的模式字符串如下:
| 字符 | 描述 | 示例 |
| -------- | ------------------------------------------------------------ | --------------------------------- |
| G | 纪元(公元前/公元) | AD |
| y | 年 | 2019,19 |
| M | 月 | 月份:8、08、Aug、August |
| d | 日 | 8、08、02 |
| h | 小时(12小时制) | 5、05、10 |
| H | 小时(24小时制) | 0~23 |
| m | 分 | 6、06 |
| s | 秒 | 9、09 |
| S | 毫秒 | 008(8毫秒,注意不是800毫秒) |
| E | 星期数 | 星期五、星期五、Fri、Friday |
| D | 一年中的第几天 | 335 |
| F | 一个月中的第几个星期几(会把这个月的1号认定为 个星期一,再计算) | 2 |
| w | 一年中的第几个星期(从 个星期日开始算) | 48 |
| W | 一个月中的第几个星期(指定周日是一周的开始) | 1 |
| z/Z | 时区 | PST/PDT/ UTC-8:00 / GMT+8:00 |
| '...' | 引号,表示引用文本 | “‘yyyy’年‘MM’月‘dd’日” -> “2019年10月10日” |
| “…” | 单引号,表示文本 | “yyyy年MM月dd日” -> “2019年10月10日” |
例如,将日期格式化为“2019-11-11 11:11:11”格式:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = format.format(new Date());
System.out.println(str);
将字符串解析为Date对象:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2019-11-11");
System.out.println(date);
四、日期时间的加减
Java中通过Calendar类对日期时间进行操作,简单介绍如下:
1. 获得Calendar对象
可以通过getInstance()方法获得一个Calendar对象。
Calendar cal = Calendar.getInstance();
2. 设置日期和时间
可以通过set()方法设置日期和时间。
cal.set(Calendar.YEAR, 2021); // 设置年份 cal.set(Calendar.MONTH, Calendar.AUGUST); // 设置月份,通过常量设置月份 cal.set(Calendar.DATE, 8); // 设置日期 cal.set(Calendar.HOUR_OF_DAY, 14); // 设置小时 cal.set(Calendar.MINUTE, 10); // 设置分钟 cal.set(Calendar.SECOND, 30); // 设置秒钟
3. 日期时间的加减
可以通过add()方法对日期时间进行加减操作。
cal.add(Calendar.YEAR, 1); // 在当前时间上加上1年 cal.add(Calendar.MONTH, 1); // 在当前时间上加上1个月,如果月份超过12,则将年份也加1 cal.add(Calendar.DATE, 1); // 在当前时间上加上1天 cal.add(Calendar.HOUR_OF_DAY, 1); // 在当前时间上加上1小时 cal.add(Calendar.MINUTE, 1); // 在当前时间上加上1分钟 cal.add(Calendar.SECOND, 1); // 在当前时间上加上1秒钟
使用示例:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2021); // 设置年份
cal.set(Calendar.MONTH, Calendar.AUGUST); // 设置月份,通过常量设置月份
cal.set(Calendar.DATE, 8); // 设置日期
cal.set(Calendar.HOUR_OF_DAY, 14); // 设置小时
cal.set(Calendar.MINUTE, 10); // 设置分钟
cal.set(Calendar.SECOND, 30); // 设置秒钟
cal.add(Calendar.YEAR, 1); // 在当前时间上加上1年
cal.add(Calendar.MONTH, 1); // 在当前时间上加上1个月,如果月份超过12,则将年份也加1
cal.add(Calendar.DATE, 1); // 在当前时间上加上1天
cal.add(Calendar.HOUR_OF_DAY, 1); // 在当前时间上加上1小时
cal.add(Calendar.MINUTE, 1); // 在当前时间上加上1分钟
cal.add(Calendar.SECOND, 1); // 在当前时间上加上1秒钟
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = format.format(cal.getTime());
System.out.println(str);
输出结果为:“2022-10-09 15:11:31”。
五、总结
通过本文,我们了解了Java中对日期时间的操作,学习了Date和SimpleDateFormat类的使用及相关操作、常见日期时间格式模式字符串以及如何使用Calendar类对日期时间进行加减操作。
最后提醒一下,虽然Java中对日期时间的处理非常方便,但是涉及到时区问题时需要注意。在实际开发中,要根据实际情况选择适当的日期时间处理方式,提高程序的健壮性和可维护性。
