Vaadin 中两个日期字段之间的区别

Difference between two dateFields in Vaadin

我在计算两个日期字段之间的天数时遇到了一些问题。我已经试过了

`

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 错误。有什么办法可以得到天数吗?

这是使用 java 8.

查找中间日期值的最简单方法
LocalDate startDate = LocalDate.now().minusDays(1);
LocalDate endDate = LocalDate.now();

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

以下代码段有效。您看到的没有即时转换器错误的原因之一是您希望一天中的什么时间。我在这里提到了一天的开始。有趣的阅​​读这里 (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

其他答案显示了如何使用 Java 8 计算两个日期之间的天数差异。但是您的实际问题是如何从 Vaadin DateField 获取日期(如 p.streef 和 Ramachandran G A 在评论中指出)。使用 dateStart.getValue() 表示 return 一个 java.util.Date 并且可以传递给 new DateTime().