Java DateTimeFormatter - 在 Java 中格式化和解析日期时间值

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(346)   2023-06-26 07:54:18

在本文中,我们展示了如何使用 DateTimeFormatter 在 Java 中格式化和解析日期时间值。

DateTimeFormatter 类用于格式化和解析现代 Java API 日期时间值。

DateTimeFormatter 包含两个基本方法:formatparse

DateTimeFormatter 常用常量

DateTimeFormatter 包含几个常见的格式化常量,例如 BASIC_ISO_DATEISO_DATE_TIME

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatterEx {

    public static void main(String[] args) {

        var now = LocalDateTime.now();
        DateTimeFormatter dtf1 = DateTimeFormatter.BASIC_ISO_DATE;
        DateTimeFormatter dtf2 = DateTimeFormatter.ISO_DATE;
        DateTimeFormatter dtf3 = DateTimeFormatter.ISO_DATE_TIME;
        DateTimeFormatter dtf4 = DateTimeFormatter.ISO_WEEK_DATE;
        DateTimeFormatter dtf5 = DateTimeFormatter.ISO_ORDINAL_DATE;

        System.out.println(dtf1.format(now));
        System.out.println(dtf2.format(now));
        System.out.println(dtf3.format(now));
        System.out.println(dtf4.format(now));
        System.out.println(dtf5.format(now));
    }
}

该程序使用五个通用格式化程序常量格式化当前日期时间。

20221026
2022-10-26
2022-10-26T20:33:56.705430917
2022-W43-3
2022-299

DateTimeFormatter 即时

Instant 是时间线上的一个瞬时点。我们使用 DateTimeFormatter.ISO_INSTANT 对其进行格式化。

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.Instant;
import java.time.format.DateTimeFormatter;

public class FormatterEx {

    public static void main(String[] args) {

        var now = Instant.now();
        var dtf = DateTimeFormatter.ISO_INSTANT;

        System.out.println(dtf.format(now));
    }
}

该程序格式化当前的 Instant 值。

2022-10-26T18:42:14.117403659Z

DateTimeFormatter 格式样式

我们可以使用 FormatStyle.SHORTFormatStyle.MEDIUMFormatStyle.LONG, FormatStyle.FULL 格式样式。

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class FormatterEx {

    public static void main(String[] args) {

        var now = LocalDate.now();

        var dtf1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
        var dtf2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
        var dtf3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
        var dtf4 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);

        System.out.println(dtf1.format(now));
        System.out.println(dtf2.format(now));
        System.out.println(dtf3.format(now));
        System.out.println(dtf4.format(now));
    }
}

该程序使用四种格式样式来格式化当前本地日期。

10/26/22
Oct 26, 2022
October 26, 2022
Wednesday, October 26, 2022

DateTimeFormatter.ofPattern

可以使用 DateTimeFormatter.ofPattern 定义自定义格式。

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatterEx {

    public static void main(String[] args) {

        var now = LocalDateTime.now();

        var dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        var dtf2 = DateTimeFormatter.ofPattern("E, MMM dd yyyy");
        var dtf3 = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a");

        System.out.println(dtf1.format(now));
        System.out.println(dtf2.format(now));
        System.out.println(dtf3.format(now));
    }
}

该程序使用三种自定义格式打印当前本地日期时间。

2022-10-26
Wed, Oct 26 2022
Wednesday, Oct 26, 2022 21:01:49 PM

DateTimeFormatter 本地化自定义格式

下一个示例使用 ofPatternLocale 创建本地化的日期时间格式。

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class FormatterEx {

    public static void main(String[] args) {

        var now = LocalDateTime.now();

        String pattern = "EEEE, MMM dd, yyyy HH:mm:ss a";
        var dtf1 = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
        var dtf2 = DateTimeFormatter.ofPattern(pattern, new Locale("RU", "ru"));
        var dtf3 = DateTimeFormatter.ofPattern(pattern, new Locale("SK", "sk"));

        System.out.println(dtf1.format(now));
        System.out.println(dtf2.format(now));
        System.out.println(dtf3.format(now));
    }
}

该程序以中文、俄语和斯洛伐克语打印当前本地日期时间。

星期三, 10月 26, 2022 21:07:17 下午
среда, окт. 26, 2022 21:07:17 PM
streda, okt 26, 2022 21:07:17 PM

Java DateTimeFormatterBuilder

可以使用 DateTimeFormatterBuilder 生成复杂的格式化程序。

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class FormatterEx {

    public static void main(String[] args) {

        var now = LocalDateTime.now();

        DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                .appendText(ChronoField.DAY_OF_MONTH)
                .appendLiteral(". ")
                .appendText(ChronoField.MONTH_OF_YEAR)
                .appendLiteral(" ")
                .appendText(ChronoField.YEAR)
                .parseCaseInsensitive()
                .toFormatter(new Locale("SK", "sk"));

        System.out.println(dtf.format(now));
    }
}

该程序使用 DateTimeFormatterBuilder 生成格式化程序。

26. októbra 2022

DateTimeFormatter 解析

parse 方法完全解析生成时间对象的文本。

com/zetcode/FormatterEx.java
package com.zetcode;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;

public class FormatterEx {

    public static void main(String[] args) {

        var d = "2022-10-26";

        DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
        TemporalAccessor ta = dtf.parse(d);
        var ld = LocalDate.from(ta);
        System.out.println(ld);
    }
}

该程序解析字符串以生成 LocalDate 值。

在本文中,我们使用了 DateTimeFormatter 来格式化和解析日期时间值。

List 所有 Java 教程.

地址:https://www.cundage.com/article/java-datetimeformatter.html

相关阅读

Spring Boot Vue.js 教程展示了如何使用 Vue.js 框架创建一个简单的 Spring Boot。 Vue.js Vue.js 是一个用于构建用户界面的 JavaScript ...
JavaScript 是否已经取代 Java 成为新的“一次编写,随处运行”的编程语言?这完全取决于您的观点。随着 WebAssembly 等技术的出现,Java 可以在新奇的“一次编写,随处编...
Usage of TypeScript,微软基于 JavaScript 的强类型语言, has soared compared to six years ago, according to th...
云莓将基于 Spring 构建的 Java 后端与使用 Lit 构建的 TypeScript 前端相结合,一个快速、响应式的 JavaScript 框架。基于 Vaadin Fusion 的 H...
本博客严重偏向于 GWT(和基于 GWT 的框架),但我们牢记 GWT 将来可能会被其他技术接管,因此我们始终对探索其他平台/框架持开放态度。正如他们所说,多元化可以降低风险。每种编程语言,即使...
Java JSON 教程展示了如何使用 JSON-Java 在 Java 中进行 JSON 序列化和反序列化。 JSON(JavaScript 对象显示法) 是一种轻量级数据交换格式。人类易于读...
JHipster 是一个长期存在且雄心勃勃的混合 Java 和 JavaScript 项目,致力于使用现代反应式前端简化全栈 Java 应用程序的开发。 JHipster 开发团队不断发布新版本...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Spring Boot JSON 教程展示了如何在 Spring Boot 注释中提供 JSON 数据。 春天 是一个流行的 Java 应用程序框架,弹簧贴 是 Spring 的演变,有助于创建...
根据最近一项全球开发人员调查,在开发人员偏好方面,JavaScript 和 Python 保持了持久力,而 锈 的使用率正在上升. 5 月 4 日的一份题为“开发者国家情况,第 22nd 版”的...