Java 设置输入日期并将其添加到列表中
基本上,我想设置日期并将其保存到列表中。我的代码如下:Java 设置输入日期并将其添加到列表中,java,simpledateformat,date-parsing,Java,Simpledateformat,Date Parsing,基本上,我想设置日期并将其保存到列表中。我的代码如下: public List<RecordList> createRecord(BigDecimal yr){ for (int index = 0; index <= 14; index++) { RecordList value = new RecordList(); if(index == 0){ value.setStartDt(toDate(("01-0
public List<RecordList> createRecord(BigDecimal yr){
for (int index = 0; index <= 14; index++) {
RecordList value = new RecordList();
if(index == 0){
value.setStartDt(toDate(("01-04-" + yr)));
value.setEndDt(toDate(("30-04-" + yr)));
}
if(index == 1){
value.setStartDt(toDate(("01-05-" + yr.add(new BigDecimal(1)))));
value.setEndDt(toDate(("31-05-" + yr.add(new BigDecimal(1)))));
}
createRecord.add(newRecordValue);
return createRecord;
}
private Date toDate(String date) {
Date newDate = null;
try {
newDate = new SimpleDateFormat("dd-MM-YYYY").parse(date);
}
catch (ParseException e) {
e.printStackTrace();
}
return newDate;
}
它不会增加到明年,而是减少到:
"StartDate": "30-12-2016",
"EndDate": "30-12-2016"
大写Y为周-年。日历年必须使用小写y:
newDate = new SimpleDateFormat("dd-MM-yyyy").parse(date);
有关更多信息,请阅读的Javadoc中的@Jens的答案是正确的,应该接受 我添加了一些如何改进错误处理的建议。正如您所看到的,
SimpleDateFormat
对代码的错误保持沉默。我敢肯定,这种行为已经导致许多人发布了大量解析代码,有时会出现“令人惊讶”的行为。幸运的是,你只是碰巧发现出了点问题
Java-8 新的内置库
java.time
(从java-8开始提供)不会解析,但会引发异常
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-YYYY");
LocalDate d = LocalDate.parse("30-12-2017", dtf);
出现以下错误消息:
线程“main”java.time.format.DateTimeParseException中的异常:
无法分析文本“30-12-2017”:无法获取LocalDate
来自临时助理:{MonthOfYear=12,
WeekBasedyar[WeekFields[星期一,4]]=2017,DayOfMonth=30}
错误消息中字段“WeekBasedYear”的存在应该会告诉您出了什么问题,因此您可以查看文档以查找正确的模式符号
顺便说一句,Java-6+7还提供了一个后端端口Three-Ten BP。我现在还测试了流行的库Joda Time:
DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MM-YYYY");
System.out.println(dtf.parseLocalDate("30-12-2017")); // 2017-12-30 (don't use it!)
因此,Java-8也是对Joda Time的改进,它在您的模式中没有发现任何问题
我的图书馆
ChronoFormatter cf=
日期模式的计时格式(“dd-MM-yyy”,PatternType.CLDR,Locale.ROOT);
LocalDate d=cf.parse(“30-12-2017”).toTemporalAccessor();//甚至没有执行
在这里,解析器的构造失败,并显示以下消息:
java.lang.IllegalArgumentException:Y作为基于周的年份需要周日期格式:dd-MM-yyy
哦,使用JSR-310中的
LocalDate
(内置Java8,也后端口到Java6和Java7),这将更容易、更自然。现在,您不应该使用SimpleDateFormat
,尤其是对于这样的任务。
DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MM-YYYY");
System.out.println(dtf.parseLocalDate("30-12-2017")); // 2017-12-30 (don't use it!)
ChronoFormatter<PlainDate> cf =
ChronoFormatter.ofDatePattern("dd-MM-YYYY", PatternType.CLDR, Locale.ROOT);
LocalDate d = cf.parse("30-12-2017").toTemporalAccessor(); // not even executed