欢迎访问宙启技术站
智能推送

Java中的日期时间操作——Date类和SimpleDateFormat类的使用

发布时间:2023-06-02 15:12:00

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中对日期时间的处理非常方便,但是涉及到时区问题时需要注意。在实际开发中,要根据实际情况选择适当的日期时间处理方式,提高程序的健壮性和可维护性。