解析MMMM YYYY格式的日期

gla*_*kou 0 java format date

我必须将日期字符串(例如"2015年10月")解析为日期.所以问题是:我如何解析MMMM yyyy格式的日期?如果新的Date对象是给定月份的第一个月,则可以.

我试过了:

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM yyyy").toFormatter();
TemporalAccessor ta = formatter.parse(node.textValue());
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date d = Date.from(instant);
Run Code Online (Sandbox Code Playgroud)

但由于缺少这一天,它不起作用.

Chr*_*röm 5

你所拥有的是一个YearMonth,而不是LocalDate因为缺少这一天.

以下作品:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy", Locale.ENGLISH);
YearMonth yearMonth = formatter.parse("October 2015", YearMonth::from);
LocalDate date = yearMonth.atDay(1);

System.out.println(yearMonth); // prints "2015-10"
System.out.println(date);      // prints "2015-10-01"
Run Code Online (Sandbox Code Playgroud)

如果您希望将其作为a java.util.Date,则需要指定您所指的时区,可能是UTC还是系统默认值?

// ZoneId zone = ZoneOffset.UTC;
ZoneId zone = ZoneId.systemDefault();
Date javaUtilDate = Date.from(date.atStartOfDay(zone).toInstant());

System.out.println(javaUtilDate); // prints "Thu Oct 01 00:00:00 CEST 2015"
                                  // because i'm in Europe/Stockholm.
Run Code Online (Sandbox Code Playgroud)