Java日期时间函数的使用及示例
Java中提供了很多日期时间相关的函数,可以用于处理日期时间的格式化、比较、计算等操作。下面我们来介绍一些常用的函数及其示例。
1. Date类
Date类是Java提供的日期时间类,它表示某个时间点的日期时间。可以使用其构造函数创建一个指定日期时间的Date对象,也可以使用其提供的各种方法进行日期时间的计算。
(1)创建Date对象
可以使用无参构造函数创建一个表示当前日期时间的Date对象:
Date date = new Date();
也可以使用含有毫秒数的long类型参数来创建一个指定日期时间的Date对象:
Date date = new Date(1578432000000L); // 2020年1月8日8:00:00
(2)日期时间格式化
可以使用SimpleDateFormat类将Date对象格式化为指定的字符串格式。以下是一些常用的格式化模式:
模式 | 意义
:-: | :-:
yyyy | 年份,如2021
MM | 月份,如01、11等
dd | 日,如01、31等
HH | 小时,24小时制,如00、23等
mm | 分钟,如00、59等
ss | 秒,如00、59等
以下示例将Date对象格式化为“年-月-日 时:分:秒”格式:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(date);
System.out.println(strDate); // 输出:2021-09-05 16:22:41
(3)日期时间比较
可以使用Date类的before()、after()、equals()方法比较两个日期时间的先后顺序和相等性。
以下示例比较两个日期时间的先后顺序:
Date date1 = new Date(1578432000000L); // 2020年1月8日8:00:00
Date date2 = new Date(); // 当前时间
if (date1.before(date2)) {
System.out.println("date1在date2之前。");
} else if (date1.after(date2)) {
System.out.println("date1在date2之后。");
} else {
System.out.println("date1和date2相等。");
}
(4)日期时间计算
可以使用Date类的getTime()方法获取一个Date对象表示的时间点的毫秒数,也可以使用setTime()方法设置一个Date对象表示的时间点。还可以使用getTime()方法获取两个Date对象之间的时间差(单位是毫秒)。
以下示例计算两个日期时间之间的天数差:
Date date1 = new Date(1578432000000L); // 2020年1月8日8:00:00
Date date2 = new Date(); // 当前时间
long diff = date2.getTime() - date1.getTime();
long days = diff / (1000 * 60 * 60 * 24);
System.out.println("两个日期之间相差:" + days + "天。");
2. Calendar类
Calendar类是Java提供的日期时间类,它提供了比Date类更为复杂的日期时间计算和操作功能。可以使用其getInstance()方法获取一个Calendar对象,然后使用其提供的方法进行日期时间的计算和操作。
(1)创建Calendar对象
可以使用Calendar类的getInstance()方法获取一个默认时区的Calendar对象:
Calendar cal = Calendar.getInstance();
也可以使用其重载的getInstance()方法获取指定时区的Calendar对象:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
(2)获取日期时间信息
可以使用Calendar类的get()方法获取一个指定字段的日期时间信息,如年份、月份、日等。以下是一些常用的字段:
字段 | 意义
:-: | :-:
Calendar.YEAR | 年份
Calendar.MONTH | 月份,从0开始计数
Calendar.DATE | 日
Calendar.DAY_OF_WEEK | 星期几,从1到7分别表示周日到周六
Calendar.HOUR_OF_DAY | 小时,24小时制
Calendar.MINUTE | 分钟
Calendar.SECOND | 秒
以下示例获取当前时间的年份、月份和日:
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DATE);
System.out.println("当前日期时间为:" + year + "年" + month + "月" + day + "日");
(3)设置日期时间信息
可以使用Calendar类的set()方法设置一个指定字段的日期时间信息。以下示例将一个Calendar对象的年份、月份和日设置为2022年3月15日:
Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2022); cal.set(Calendar.MONTH, 2); cal.set(Calendar.DATE, 15);
(4)日期时间计算
可以使用Calendar类的add()、roll()方法进行日期时间的计算和滚动。其中,add()方法可以在指定字段上添加或减去指定的时间量,而roll()方法只会在指定字段上进行滚动,不会影响其他字段的值。
以下示例让一个Calendar对象的年份加1,并滚动月份和日:
Calendar cal = Calendar.getInstance(); cal.add(Calendar.YEAR, 1); cal.roll(Calendar.MONTH, 1); cal.roll(Calendar.DATE, 1);
3. LocalDate、LocalTime和LocalDateTime类
Java 8引入了新的日期时间类:LocalDate、LocalTime和LocalDateTime类。它们可以在不考虑时区和时间偏移量的情况下表示日期时间,并提供了方便的日期时间计算和操作功能。以下是它们的介绍及示例。
(1)LocalDate类
LocalDate类表示一个不带时区的日期,可以用于表示生日、纪念日等时间点。
(a)创建LocalDate对象
可以使用静态工厂方法of()创建一个指定年月日的LocalDate对象:
LocalDate date = LocalDate.of(2022, 3, 15);
也可以使用now()方法创建表示当前日期的LocalDate对象:
LocalDate date = LocalDate.now();
(b)日期格式化
可以使用DateTimeFormatter类将LocalDate对象格式化为指定的字符串格式。以下是一些常用的格式化模式:
模式 | 意义
:-: | :-:
yyyy | 年份,如2021
MM | 月份,如01、11等
dd | 日,如01、31等
以下示例将LocalDate对象格式化为“年-月-日”格式:
LocalDate date = LocalDate.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String strDate = dtf.format(date);
System.out.println(strDate); // 输出:2022-03-15
(c)日期计算
可以使用plus()、minus()方法在LocalDate对象上添加或减去指定的时间量。以下示例将一个LocalDate对象的年份加1,并减去7天:
LocalDate date = LocalDate.now(); LocalDate newDate = date.plusYears(1).minusDays(7);
(2)LocalTime类
LocalTime类表示一个不带时区的时间(时分秒),可以用于表示开饭时间、下班时间等。
(a)创建LocalTime对象
可以使用静态工厂方法of()创建一个指定小时分秒的LocalTime对象:
LocalTime time = LocalTime.of(18, 0); // 表示18:00
也可以使用now()方法创建表示当前时间的LocalTime对象:
LocalTime time = LocalTime.now();
(b)时间格式化
可以使用DateTimeFormatter类将LocalTime对象格式化为指定的字符串格式。以下是一些常用的格式化模式:
模式 | 意义
:-: | :-:
HH | 小时,24小时制,如00、23等
mm | 分钟,如00、59等
ss | 秒,如00、59等
以下示例将LocalTime对象格式化为“时:分:秒”格式:
`
LocalTime time = LocalTime.of
