我如何在Java中获取要在甘特图中使用的日期中的某月的某天

时间:2019-05-24 21:17:02

标签: java date dayofmonth

我想用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;

}

2 个答案:

答案 0 :(得分:2)

在某些情况下,我调查了您先前的堆栈溢出问题。请不要指望Stack Overflow用户通常会这样做。他们不会。

据我了解,Task来自JFreeChart,org.jfree.data.gantt.Task,其构造函数需要两个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对象之前,不要将获取的数据放入单独的列表中并再次将其取出来会更简单。在您的代码中,请尽力做到最好。

PS不推荐使用getXxxjava.sql.Date的{​​{1}}方法,因为它们在时区中的运行不可靠,因此即使您无法避免使用这些类,也不要调用这些方法。如果确实从某个地方获得了java.util.Date,那么要做的第一件事就是调用其java.sql.Date方法将其转换为现代的toLocalDate​

编辑:您正在使用嵌套方法调用的单个语句中完成很多工作。我同意巴西尔·布尔克(Basil Bourque)的评论,即读者(和您自己?)很难遵循这一点。我相信这也是为什么人们(包括我自己)不理解您的问题的一部分。我们建议将其分解。一个例子是:

LocalDate

比较麻烦,但现在每个步骤都很容易完成。

我通常不会 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),但这是一个品味或习惯问题。在两种情况下结果都是相同的。

链接

答案 1 :(得分:0)

我假设DatesMap,所以Dates.get(key)返回存储在地图中的特定日期。

在这种情况下,您可以简单地使用java.util.Calendar从日期中获取整数形式的月份。

Date dt = Dates.get(key);
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

希望有帮助!