📜  java中的日期格式 (1)

📅  最后修改于: 2023-12-03 15:16:33.492000             🧑  作者: Mango

Java中的日期格式

在Java中,日期格式化是一个非常常见的需求,因为很多业务涉及到了日期时间的处理,例如网站的注册时间、交易记录等等。Java中提供了丰富的日期格式化和转换的工具类,这篇文章将会介绍一些常用的日期格式。

SimpleDateFormat类

SimpleDateFormat类是Java中日期格式化的核心类,通过调用它提供的方法可以将日期对象格式化为指定格式的字符串,也可以将字符串解析为日期对象。

日期模式字符串

SimpleDateFormat的格式化和解析都需要一个日期模式字符串,用来指定日期的输出和解析格式。在日期模式字符串中,可以使用下表中列出的字符来代表特定的日期元素:

| 字符 | 代表意义 | 例子 | | ---- | ----------------------------- | -------- | | yyyy | 四位年份 | 2021 | | yy | 两位年份 | 21 | | MM | 月份,两位数字 | 09 | | M | 月份,一位或两位数字 | 9 or 09 | | dd | 日期,两位数字 | 12 | | d | 日期,一位或两位数字 | 5 or 05 | | HH | 小时,24小时制,两位数字 | 23 | | H | 小时,24小时制,一位或两位数字 | 5 or 05 | | mm | 分钟,两位数字 | 45 | | m | 分钟,一位或两位数字 | 5 or 05 | | ss | 秒,两位数字 | 50 | | s | 秒,一位或两位数字 | 5 or 05 |

在日期模式字符串中,除了上述特定字符以外的其他字符都会被原封不动地输出或解析。

格式化日期对象

要将一个日期对象格式化为指定格式的字符串,可以通过以下代码实现:

Date date = new Date(); // 获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // 输出:2021-09-12 11:05:35

通过SimpleDateFormat的format方法,将Date对象date格式化为指定格式的字符串formattedDate。

解析字符串为日期对象

要将一个字符串解析为Date对象,可以通过以下代码实现:

String dateString = "2021-09-12 11:05:35";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateString);
System.out.println(date); // 输出:Sun Sep 12 11:05:35 CST 2021

可以看到,将日期字符串解析成日期对象后,输出的日期对象中包含了年月日、时分秒等信息。

DateTimeFormatter类

Java 8提供了新的日期时间API,其中包括DateTimeFormatter类,提供了比SimpleDateFormat更好用和更安全的日期格式化和解析,推荐使用。DateTimeFormatter使用ISO标准日期格式作为默认格式,这可以通过withLocale、withZone和withResolverStyle等方法进行自定义。

ZonedDateTime和OffsetDateTime

Java 8提供了新的日期时间类ZonedDateTime和OffsetDateTime,用于表示带时区的日期时间和带偏移量的日期时间。在格式化输出和解析输入时,需要考虑时区和偏移量的影响。

格式化日期时间

DateTimeFormatter的格式化方法也是format,用法和SimpleDateFormat的format方法类似,通过以下代码实现:

ZonedDateTime zdt = ZonedDateTime.now(); // 获取当前日期时间和时区信息
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS zzzz");
String formattedDateTime = dtf.format(zdt);
System.out.println(formattedDateTime); // 输出:2021-09-12 11:05:35.2262 China Standard Time
解析字符串为日期时间

DateTimeFormatter的解析方法是parse,用法和SimpleDateFormat的parse方法类似,通过以下代码实现:

String dateTimeString = "2021-09-12 11:05:35.2262 China Standard Time";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS zzzz");
ZonedDateTime zdt = ZonedDateTime.parse(dateTimeString, dtf);
System.out.println(zdt); // 输出:2021-09-12T11:05:35.226200+08:00[Asia/Shanghai]

需要注意的是,在解析多数时区名称时,尤其是夏令时和标准时间转换的时候,需要考虑ISO-8601等标准日期时间格式。

总结

Java中的日期格式化类是非常强大和灵活的,通过使用SimpleDateFormat和DateTimeFormatter可以满足各种需求。在Java 8及以上版本中,建议使用DateTimeFormatter和ZonedDateTime/OffsetDateTime等类,可以提供更好的日期时间处理功能。在使用日期解析时,要特别注意时区和夏令时的影响,以避免潜在的错误。