2017-08-09 5371 views
2

我正在尝试获取下一个即将到来的星期五的日期,并将其格式设置为yyyyMMDD。如果可能,我想在不使用JodaTime的情况下执行此操作。这里是我的代码:如何将LocalDate格式化为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

+1

你的意思是'yyyyMMdd'?我相信你不想打印每年的日历,但每个月的日子。 – Kayaman

+0

这绝对是我的意思。今天我学到了。 – zero01alpha

+0

'LocalDate.now(ZoneId.of(“Asia/Kolkata”)).with(TemporalAdjusters.next(DayOfWeek.FRIDAY)).format(DateTimeFormatter.BASIC_ISO_DATE)' –

回答

4

D意味着day-of-year。您必须使用小号d

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

您可以查看所有图案here

这种特殊的模式是建立在Java 8及更高版本:DateTimeFormatter.BASIC_ISO_DATE

1

我认为你有两个问题。

首先,您正在字符文字('' vs "")中附上字符串。

二,DD(年的一天)在您的格式字符串需要dd(月日)。

DateTimeFormatter.ofPattern("yyyyMMdd"); 
+1

Ha,oops。为了可视性,将其从Groovy转换为Java。谢谢 :) – zero01alpha

相关问题