【问题标题】:How to format LocalDate to yyyyMMDD (without JodaTime)如何将 LocalDate 格式化为 yyyyMMDD(没有 JodaTime)
【发布时间】:2017-08-09 18:24:56
【问题描述】:

我正在尝试获取下一个即将到来的星期五的日期并将其格式化为 yyyyMMDD。如果可能的话,我想在不使用 JodaTime 的情况下执行此操作。这是我的代码:

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;
import java.time.format.DateTimeFormatter;

// snippet from main method
LocalDate friday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern('yyyyMMDD');
System.out.println(friday.format(formatter));

但是当我运行它时,我收到以下错误(今天运行它 20170809)

java.time.DateTimeException: Field DayOfYear cannot be printed as the value 223 exceeds the maximum print width of 2

我做错了什么?

编辑:我使用的是 Java 8

【问题讨论】:

  • 你的意思是yyyyMMdd?我确定您不想打印一年中的一天,而是一个月中的一天。
  • 这绝对是我的意思。今天我学会了。
  • LocalDate.now( ZoneId.of( "Asia/Kolkata" ) ).with( TemporalAdjusters.next( DayOfWeek.FRIDAY ) ).format( DateTimeFormatter.BASIC_ISO_DATE )
  • 对于那些使用 org.joda.time.LocalTime 的解决方案是 friday.toString(ISODateTimeFormat.basicDate())

标签: java


【解决方案1】:

D 表示day-of-year。你必须使用小的d

所以在你的情况下使用"yyyyMMdd"

您可以检查所有模式here

此特定模式内置于 Java 8 及更高版本中:DateTimeFormatter.BASIC_ISO_DATE

【讨论】:

    【解决方案2】:

    我认为你有两个问题。

    首先,您将字符串包含在字符文字中(''"")。

    其次,格式字符串中的DD(一年中的某天)必须是dd(一个月中的某天)。

    DateTimeFormatter.ofPattern("yyyyMMdd");
    

    【讨论】:

    • 哈,哎呀。为了可见性,将其从 Groovy 转换为 Java。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2015-03-26
    • 2019-03-11
    • 1970-01-01
    • 2021-04-12
    • 2017-02-03
    • 2014-12-12
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多