Skip to content

DateTimeFormatter

About 968 wordsAbout 3 min

2025-06-13

这里简单学习一下类DateTimeFormmater。

DateTimeFormatter 是线程安全的。

【Java 8 新特性】Java DateTimeFormatter 日期时间格式化器

DateTimeFormatter

DateTimeFormmater源代码

DateTimeFormmater是LocalDateTime相关的格式化类,下面是类中定义的快捷的格式化样式的简单说明:

  • ISO_LOCAL_DATE:格式:yyyy-MM-dd ,适用于只包含日期的本地时间(没有时区信息或时间)。例如:2025-07-28

  • ISO_OFFSET_DATE:格式:yyyy-MM-dd+hh:mm,适用于包含偏移量的日期。它包含日期和时区偏移。例如:2025-07-28+02:00

  • ISO_DATE 格式:yyyy-MM-dd,适用于日期格式,类似于 ISO_LOCAL_DATE,它通常是一个标准的 ISO 日期格式。

  • ISO_LOCAL_TIME: 格式:HH:mm:ss,适用于只包含时间的本地时间(没有日期和时区信息)。例如:14:30:45

  • ISO_TIME 格式:HH:mm:ss, 适用于时间格式,通常没有日期信息。

  • ISO_LOCAL_DATE_TIME 格式:yyyy-MM-dd'T'HH:mm:ss ,适用于本地的日期时间,既有日期部分,也有时间部分。没有时区信息。例如:2025-07-28T14:30:45

  • ISO_OFFSET_DATE_TIME 格式:yyyy-MM-dd'T'HH:mm:ss+hh:mm ,适用于包含偏移量的日期时间,包括日期、时间和时区偏移。例如:2025-07-28T14:30:45+02:00

  • ISO_DATE_TIME 格式:yyyy-MM-dd'T'HH:mm:ss ,适用于日期和时间的格式,类似于 ISO_LOCAL_DATE_TIME,但通常具有更严格的标准。

  • ISO_ORDINAL_DATE:格式:yyyy-DDD,适用于按照一年中的第几天表示日期的格式。例如:2025-210,其中 210 表示该年中的第 210 天。

  • ISO_WEEK_DATE 格式:yyyy-Www-D, 适用于 ISO 周日期格式,表示年份、周数和星期几。例如:2025-W30-2,表示 2025 年第 30 周的星期二。

  • ISO_INSTANT 格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ
    适用于精确到毫秒的时间格式,并包含时区信息。常用于表示时间戳。例如:2025-07-28T14:30:45.123+02:00

像是上面定义这些变量,是通过一个Builder的方法来构建对象的。

public static final DateTimeFormatter ISO_LOCAL_DATE;
static {
    ISO_LOCAL_DATE = new DateTimeFormatterBuilder()
            .appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
            .appendLiteral('-')
            .appendValue(MONTH_OF_YEAR, 2)
            .appendLiteral('-')
            .appendValue(DAY_OF_MONTH, 2)
            .toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}

测试用例

DateTimeFormmater类方法

public static DateTimeFormatter ofPattern(String pattern)

通过传入一个字符串类型的格式化串创建DateTimeFormatter对象。

public static DateTimeFormatter ofPattern(String pattern) {
    return (new DateTimeFormatterBuilder()).appendPattern(pattern).toFormatter();
}

Date转LocalDate

Date对象表示特定的日期和时间,而LocalDate(Java8)对象只包含没有任何时间信息的日期。 因此,如果我们只关心日期而不是时间信息,则可以在Date和LocalDate之间进行转换。

@Test
public void test3() {
    Date date = new Date();
    // 返回当前系统默认的时区
    ZoneId zoneId = ZoneId.systemDefault();

    // atZone()方法返回在指定时区,从该Instant生成的ZonedDateTime
    ZonedDateTime zonedDateTime = date.toInstant().atZone(zoneId);
    LocalDate localDate = zonedDateTime.toLocalDate();
    LocalTime localTime = zonedDateTime.toLocalTime();
    LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
}

java中Date与LocalDate、LocalDate、LocalDateTime互相转化

day048:LocalDateTime中增加、减少、直接修改时间的方法、计算时间间隔的方法

String t1 = "2025-01-11 00:00:00";
String t2 = "2025-01-11 11:00:00";
LocalTime parse = fm.parse(t1, TemporalQueries.localTime());
LocalDate parse1 = fm.parse(t1, TemporalQueries.localDate());

LocalDateTime query = fm.parse(t1).query(LocalDateTime::from);
LocalDateTime query1 = fm.parse(t2).query(LocalDateTime::from);
int i = query.compareTo(query1);
System.out.println(i);

Changelog

8/20/25, 11:06 AM
View All Changelog
  • 4c155-Merge branch 'dev1'on

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!