当我使用func +=(inout l: String!, r: String) {
l = (l ?? "") + r
}
var a: String! = "a"
var b: String = "b"
a += b // "ab"
时,它可以解析。
SimpleDateFormat
但是当我使用Java 8 SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
format.setLenient(false);
Date d = format.parse(date);
时,
DateTimeFormatter
它抛出
java.time.format.DateTimeParseException:无法解析文本'201510':无法从TemporalAccessor获取LocalDate:{Year = 2015,MonthOfYear = 10},ISO类型为java .time.format.Parsed
日期的字符串值为DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
LocalDate localDate = LocalDate.parse(date, formatter);
。
答案 0 :(得分:11)
问自己一个问题:哪一天应该用字符串"201510"
解析? LocalDate
需要一天,但由于日期中没有要解析的日期,因此无法构建LocalDate
的实例。
如果您只想解析一年零一个月,可以使用YearMonth
对象:
YearMonth localDate = YearMonth.parse(date, formatter);
但是,如果您真的希望从此String中解析LocalDate
,则可以构建自己的DateTimeFormatter
,以便它将该月的第一天用作默认值:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyyMM")
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter();
LocalDate localDate = LocalDate.parse(date, formatter);
答案 1 :(得分:3)
您可以使用YearMonth
并指定所需的日期(例如第一个):
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
LocalDate localDate = YearMonth.parse(date, formatter).atDay(1);
如果这一天无关紧要,只需使用YearMonth
。