我必须将日期字符串(例如“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);
但是由于缺少这一天,它不起作用。
答案 0 :(得分: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"
如果您希望将其作为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.
答案 1 :(得分:3)
这个怎么样
DateFormat format = new SimpleDateFormat("MMMM yyyy", Locale.ENGLISH);
Date date = format.parse("October 2015");
System.out.println(date); // Prints Thu Oct 01 00:00:00 BST 2015
答案 2 :(得分:1)
对于java 8
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("MMMM yyyy")
.toFormatter(Locale.US);
TemporalAccessor ta = formatter.parse("October 2015");
YearMonth ym = YearMonth.from(ta);
LocalDateTime dt = LocalDateTime.of(ym.getYear(), ym.getMonthValue(),
1, 0, 0, 0);
Instant instant = Instant.from(dt.atZone(ZoneId.systemDefault()));
Date d = Date.from(instant);
答案 3 :(得分:0)
您可以使用SimpleDateFormat
的{{1}}方法
parse
格式说明:
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MMMMM yyyy"); //MMMM yyyy example: October 2015
public Date getDateFromString(String input) {
return DATE_FORMAT.parse(input);
}
表示您正在解析全名月份,例如“十月”
MMMM
表示您有4位数的长度。例如,如果您想解析10月15日,您的格式将如下所示:“MMMM yy”
答案 4 :(得分:0)
为什么不使用SimpleDateFormatter? 这对我来说很好:
SimpleDateFormat formatter = new SimpleDateFormat("MMMM yyyy");
Date d = formatter.parse("Oktober 2015");