我想在java中获取日期的月份
我尝试 getday() 但它返回星期几
for (int i =0; i<count; i++) {
series1.add(new Task(Names.get(i),
Date.from(LocalDate.of(Dates.get(j).getYear(), Dates.get(j).getMonth(),Dates.get(j).getDay()).atStartOfDay().toInstant(ZoneOffset.UTC)),
Date.from(LocalDate.of(Dates.get(k).getYear(),Dates.get(k).getMonth(),Dates.get(k).getDay()).atStartOfDay().toInstant(ZoneOffset.UTC))
)
);
j+=2;k+=2;
}
最佳答案
我研究了您之前的 Stack Overflow 问题以了解一些背景信息。请不要指望 Stack Overflow 用户通常会这样做。他们不会。
据我了解,Task
是 org.jfree.data.gantt.Task
来自 JFreeChart,其构造函数需要两个 java.util.Date
参数(开始和结束)。您正在获取java.sql.Date
来自数据库的对象。
虽然您不能(合理地)更改 JFreeChart,但从 JDBC 4.2 开始,您可以利用现代化的 LocalDate
对象而不是老式的java.sql.Date
数据库中的对象:
while (rs.next()) {
String a = rs.getString("TITRE");
LocalDate startDate = rs.getObject("DATE DEBUT Prévi", LocalDate.class);
LocalDate endDate = rs.getObject("DATE FIN prévi", LocalDate.class);
series1.add(new Task(a,
Date.from(startDate.atStartOfDay().toInstant(ZoneOffset.UTC)),
Date.from(endDate.atStartOfDay().toInstant(ZoneOffset.UTC))
)
);
}
我发现在构建 Task
之前,不要将获取的数据放入单独的列表中并再次将其取出,这样更简单。对象。在您的代码中,请按照您认为最好的方式进行操作。
附注getXxx
java.sql.Date
的方法和java.util.Date
已被弃用,因为它们跨时区工作不可靠,因此即使您无法避免这些类,也不要调用这些方法。如果您确实得到 java.sql.Date
从某个地方,要做的第一件事就是调用它的 toLocalDate
将其转换为现代的方法LocalDate
.
编辑:您在使用嵌套方法调用的单个语句中做了很多事情。我同意巴兹尔· boolean 克(Basil Bourque)的评论,即读者(和你自己?)可能很难理解这一点。我相信这也是人们(包括我自己)不理解你的问题的部分原因。我们建议分手。一个例子是:
Instant startInstant = startDate.atStartOfDay().toInstant(ZoneOffset.UTC);
Date startUtilDate = Date.from(startInstant);
// Similarly for end date
Task newTask = new Task(a, startUtilDate, endUtilDate);
series1.add(newTask);
虽然比较啰嗦,但现在每个步骤都很容易遵循。
而不是 startDate.atStartOfDay().toInstant(ZoneOffset.UTC)
我通常这样做startDate.atStartOfDay(ZoneOffset.UTC).toInstant()
,但这是品味或习惯的问题。两种情况的结果是相同的。
链接
关于java - 我怎样才能得到java中的日期的月份日以在甘特图中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299622/