Vaadin中两个dateFields之间的差异

时间:2016-07-27 08:53:26

标签: java vaadin datefield

我在计算两个dateField之间的天数时遇到了一些问题。我已经尝试了

`

DateField dateStart = new DateField();
DateField dateEnd = new DateField();
DateTime start = new DateTime(dateStart);
DateTime end = new DateTime(dateEnd);

int days = Days.daysBetween(new DateTime(start), new DateTime(end)).getDays();
        `

以下是运行此代码后出现的错误

 java.lang.IllegalArgumentException: No instant converter found for type: com.vaadin.ui.DateField

我也尝试过使用ChronoUnit

LocalDate startDate = LocalDate.now().minusDays(1);
LocalDate endDate = LocalDate.now();

long days = Period.between(startDate, endDate).getDays();
assertEquals(1, days);

long days2 = ChronoUnit.DAYS.between(startDate, endDate);
assertEquals(1, days2); 

还有柔道时光

DateTime startDate = new DateTime().minusDays(1);
DateTime endDate = new DateTime();

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();

这两个代码都出现NullPointerException错误。有什么方法可以让我获得天数。

3 个答案:

答案 0 :(得分:1)

这是使用java 8查找中间日期值的最简单方法。

LocalDate startDate = LocalDate.now().minusDays(1);
LocalDate endDate = LocalDate.now();

long days = Period.between(startDate, endDate).getDays();
System.out.println(days);

答案 1 :(得分:1)

其他答案显示了如何使用Java 8计算两个日期之间的差异。但实际问题是如何从Vaadin DateField获取日期(正如p.streef和Ramachandran GA指出的那样)评论)。使用dateStart.getValue()作为返回java.util.Date的内容,可以传递给new DateTime()

答案 2 :(得分:0)

以下代码段有效。你看到没有即时转换器错误的原因之一是你想要一天的时间。我在这里提到过一天的开始。有趣的读到这里(How to convert Joda Localdate to Joda DateTime?)。

    LocalDateTime startDateTime = LocalDate.now().atStartOfDay().minusDays(1);

    LocalDateTime endDateTime = LocalDate.now().atStartOfDay();

    long days = Period.between(startDateTime.toLocalDate(), endDateTime.toLocalDate()).getDays();
    System.out.println("The difference in dates is " + days);

在输出处:日期的差异为1