商业澳洲 文章 Java 中的日期时间总结

Java 中的日期时间总结


 

 

 

大家好,我是 god23bin,在日常开发中,我们经常需要处理日期和时间,日期和时间可以说是一定会用到的,现在总结下 Java 中日期与时间的基本概念与一些常用的用法。

在 Java 8 之前,主要使用的日期和时间 API 包括:

Date 是 Java 中表示日期和时间的类,一般用于获取当前的日期和时间,比如更新数据库中记录的时候,需要更新某个日期时间,那么就直接 new Date(),这样实例化的 Date 对象就是当前的这一时刻。

Date date = new Date();  System.out.println(date.toString());  

SimpleDateFormat 是 Java 中用于格式化日期和时间的类,此处所谓格式化,就是字面意思,统一格式,即它允许你将日期和时间按照指定的格式转换成字符串,也可以将对应格式的字符串解析成日期和时间对象。

主要用法就是:

使用 public final String format(Date date) 方法格式化日期时间。上面输出的格式,不是我们想要的,所以需要进行日期时间的格式化。

最常用的一个格式化的模型是:yyyy-MM-dd HH:mm:ss

其中,yyyy 是年份,MM 是月份,dd 是天数,后面同理,HH:mm:ss 是时、分、秒。

 String pattern1 = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat sdf1 = new SimpleDateFormat(pattern1); System.out.println(sdf1.format(date3));  String pattern2 = "yyyy年MM月dd日 HH时mm分ss秒"; SimpleDateFormat sdf2 = new SimpleDateFormat(pattern2); System.out.println(sdf2.format(date3));  

使用 public Date parse(String source) 方法将 String 转成 Date

String input = "2023-01-01 00:00:01"; String pattern1 = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat sdf3 = new SimpleDateFormat(pattern1); try {  Date parsed = sdf3.parse(input); System.out.println(parsed); } catch (ParseException e) { e.printStackTrace(); } 

Calendar 是 Java 中用于处理日期和时间的抽象基类。它提供了一个类似于日历的机制,允许我们进行日期和时间的计算、格式化和解析。

简而言之,这个类主要用于日期的计算,比如你想得到此刻前一天的日期。

Calendar 是一个抽象类,不能直接实例化。所以我们需要使用 getInstance() 方法获取 Calendar 的实例:

Calendar calendar = Calendar.getInstance(); 

当我们有一个 Calendar 对象后,就可以表示日期和时间了,通过设置各个字段,如年、月、日、时、分、秒等来表示一个具体的日期和时间。

calendar.set(Calendar.YEAR, 2023);  calendar.set(Calendar.MONTH, Calendar.MAY);  calendar.set(Calendar.DAY_OF_MONTH, 16);  

Calendar允许你进行日期和时间的加减操作,例如:

calendar.add(Calendar.DAY_OF_MONTH, 7);  

这将在当前日期的基础上增加 7 天。

下表列出了 Java 中 Calendar 类常用的方法及其描述:

当 Java 8 引入 java.time 包时,它引入了一些新的日期和时间 API,这些 API 旨在提供更强大、更易于使用、线程安全且具有本地化支持的日期和时间处理方式。

以下是这些 API 的概述:

直接通过调用其相关静态方法就可以进行相关的日期处理:

LocalDate now = LocalDate.now();  LocalDate date = LocalDate.of(2023, 5, 15);  LocalDate parsedDate = LocalDate.parse("2023-05-15");  int year = date.getYear();  int month = date.getMonthValue();  int day = date.getDayOfMonth();  

同理,也是类似的,对时间进行处理:

LocalTime time = LocalTime.now();  LocalTime specificTime = LocalTime.of(14, 30, 0);  LocalTime parsedTime = LocalTime.parse("14:30:00");  int hour = time.getHour();  int minute = time.getMinute();  int second = time.getSecond();  

处理日期和时间:

LocalDateTime dateTime = LocalDateTime.now();  LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 15, 14, 30);  LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-15T14:30:00");  

处理带有时区的日期和时间,我们可以使用 ZoneId.of("时区标识") 来获取相应的时区对象:

ZoneId zone = ZoneId.of("America/New_York");  ZonedDateTime zonedDateTime = ZonedDateTime.now(zone);  

带有时区信息的日期时间通常采用以下的格式:

2023-09-08T11:30:00+08:00[Asia/Shanghai] 

这个例子表示的是 2023年9月8日11点30分,位于亚洲/上海时区,时区偏移量为+08:00,也就是东八区。在这种表示中,日期时间后面跟着时区信息,方括号内的部分为时区标识。

下面是一些常见的时区标识及其对应的时区:

测量时间段的持续时间:

LocalDateTime start = LocalDateTime.of(2023, 9, 8, 11, 0); LocalDateTime end = LocalDateTime.of(2023, 9, 8, 11, 30); Duration duration = Duration.between(start, end);  long minutes = duration.toMinutes();  

测量日期之间的时间段:

LocalDate startDate = LocalDate.of(2023, 9, 1); LocalDate endDate = LocalDate.of(2023, 9, 8); Period period = Period.between(startDate, endDate);  int days = period.getDays();  

格式化日期和时间:

LocalDateTime dateTime = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = dateTime.format(formatter);  LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-15 14:30:00", formatter);  

以下是 Java 8 中新日期时间 API 中常用的方法,用于处理日期和时间的创建、获取字段值、计算差异、格式化和解析等:

一般前端传递日期时间字符串,我们后端进行接收,就需要将日期时间字符串转成我们需要的 Date 类型的日期时间,即 String 到 Date 的转化

当我们从数据库中查出日期时间,是 Date 类型的日期时间,返回给前端就提供 JSON 数据,就需要讲 Date 类型的日期时间转成 字符串类型的日期时间,即 Date 到 String 的转化

有两个注解可以解决这两件事:Spring 提供的 @DateTimeFormat 和 Jackson 提供的 @JsonFormat

Jackson 相关依赖:

 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.13.4</version> </dependency>  <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.13.4</version> </dependency>  <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.4.2</version> </dependency> 

说明:

  • @DateTimeFormat将 String 转成 Date,主要用于处理前端传递的 String 类型的日期时间转成 Java 中的 Date 类型的日期时间对象
  • @JsonFormat将 Date 转成 String,主要用于处理后端从数据库中查出的 Date 类型的日期时间,它可以用于标记 Java 类的属性,以指定日期在 JSON 中的格式。

日常用在各种域对象的日期属性上,比如 DTO、VO、PO。

public class A { @JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy年MM月") private Date startTime; @JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy年MM月") private Date endTime; } public class B { @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date startTime; @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; } 

希望各位屏幕前的靓仔靓女们给个三连!你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

咱们下期再见!


 

 

原文链接:https://blog.csdn.net/weixin_44408768/article/details/132756291?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169900313716800182141205%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=169900313716800182141205&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-3-132756291-null-null.nonecase&utm_term=%E6%BE%B3%E6%B4%B22023

作者: 知澳头条

知澳资深作者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

1300766331

邮箱: info@getau.com.au

澳洲本地网站设计开发团队 超20人团队,悉尼设计开发14年 联系电话:1300766331 微信: XtechnologyAU
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部