【问题标题】:Difference between two dateFields in VaadinVaadin中两个日期字段之间的区别
【发布时间】:2016-12-01 04:25:40
【问题描述】:

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

`

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

【问题讨论】:

  • 我不确定 DateTime 是什么类型的类,但使用字段作为输入创建一个新的 DateTime 可能是错误的。为什么不直接使用 dateStart.getValue() 您可以使用 getTime() 将此 Date 转换为 ms 或转换为 Calendar 或 LocalDateTime 以获得更方便的方法

标签: java vaadin datefield


【解决方案1】:

其他答案显示如何使用 Java 8 计算两个日期之间的天数差异。但您的实际问题是如何从 Vaadin DateField 获取日期(正如 p.streef 和 Ramachandran GA 在 cmets 中指出的那样) .使用dateStart.getValue() 将返回java.util.Date 并可以传递给new DateTime()

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你能详细说明你的答案吗?
    • 在上面的代码中可以给出结果1..那你需要对吗?
    • 我只是说纯代码的答案可能没有多大帮助(例如this
    【解决方案3】:

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

    【讨论】:

    • 我可以将 DateField 更改为 LocalDate 吗?
    • 假设日期字段来自 this ,超类上的 vaadin.com/api/com/vaadin/ui/DateField.htmlgetValue() 会给出一个日期。所以 yourVaadinDateTime.getValue() 返回一个日期。日期输入 = new Date(); LocalDateTime startDateTime = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault()).minusDays(1);
    猜你喜欢
    • 2023-03-25
    • 2017-01-29
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2017-09-14
    • 2020-12-16
    • 2016-07-10
    相关资源
    最近更新 更多