解析MMMM YYYY格式的日期

时间:2015-10-22 11:27:21

标签: java date format

我必须将日期字符串(例如“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);

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

5 个答案:

答案 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

有关详细信息,请参阅:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#parse(java.lang.String,%20java.text.ParsePosition)

格式说明: 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");