Java 如何从日期变量和int变量计算新的日期值

Java 如何从日期变量和int变量计算新的日期值,java,date,Java,Date,我试图创建一个保存许可证数据的小应用程序,我允许用户输入赎回日期和许可证长度 我想创建一个剩余天数字段,用户可以在其中查看他们在兑换新许可证之前还剩多少天 我使用了jxDatepicker 并且有三个组合框,用户可以在其中选择许可证可用的年、月和日数 int days = Integer.parseInt(cboDays.getSelectedItem().toString()); Date dRedeemed = cboDate.getDate(); SimpleDateFormat form

我试图创建一个保存许可证数据的小应用程序,我允许用户输入赎回日期和许可证长度

我想创建一个剩余天数字段,用户可以在其中查看他们在兑换新许可证之前还剩多少天

我使用了jxDatepicker

并且有三个组合框,用户可以在其中选择许可证可用的年、月和日数

int days = Integer.parseInt(cboDays.getSelectedItem().toString());
Date dRedeemed = cboDate.getDate();
SimpleDateFormat format = new SimpleDateFormat("dd/MM/YYYY");
String strRedeemed = format.format(dRedeemed);
days = (years * 365) + (months * 12) + days;
编辑

我想我让一些人很困惑。否则我不明白这将如何解决我的问题。我试着更详细地描述一下

情景

用户可以使用应用程序记录他们的许可证,他们输入许可证兑换的日期,并输入许可证的长度(天)

我想弄清楚你是否能从这两个变量中计算出一个新的日期。比如说

days = INPUT FROM USER;    
dateRedeemed = new Date();   
newDate = dateRedeemed + days;
这会在几天内给你答案


这会在几天内给你答案

假设您在某个时间之前(通过数据库或类似方式)收到许可证截止日期,您可以利用
java.time
API来计算截止日期之前的剩余天数,例如:

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;

public class StackoverflowMain {

    public static void main(String args[]) {
        // define a future deadline (hint: define some others for your test cases, too)
        LocalDate deadLine = LocalDate.parse("2019-06-29", DateTimeFormatter.ISO_DATE);
        System.out.println("Days til deadline: " + getRemainingDays(deadLine));
    }

    public static long getRemainingDays(LocalDate deadline) {
        return ChronoUnit.DAYS.between(LocalDate.now(), deadline);
    }
}
请注意现代API的使用,现在推荐使用

编辑

对于不希望重构整个代码的情况,这里有两种方法可以处理从
java.time.LocalDate
java.util.Date
的转换:

    public LocalDate toLocalDate(Date dateToConvert) {
        return dateToConvert.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
    }

    public static Date toDate(LocalDate localDate) {
        return Date.from(
                localDate.atStartOfDay()
                    .atZone(ZoneId.systemDefault())
                    .toInstant()
                );
    }

假设您在某个时间之前(通过数据库或类似方式)收到许可证截止日期,您可以利用
java.time
API来计算截止日期之前的剩余天数,例如:

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;

public class StackoverflowMain {

    public static void main(String args[]) {
        // define a future deadline (hint: define some others for your test cases, too)
        LocalDate deadLine = LocalDate.parse("2019-06-29", DateTimeFormatter.ISO_DATE);
        System.out.println("Days til deadline: " + getRemainingDays(deadLine));
    }

    public static long getRemainingDays(LocalDate deadline) {
        return ChronoUnit.DAYS.between(LocalDate.now(), deadline);
    }
}
请注意现代API的使用,现在推荐使用

编辑

对于不希望重构整个代码的情况,这里有两种方法可以处理从
java.time.LocalDate
java.util.Date
的转换:

    public LocalDate toLocalDate(Date dateToConvert) {
        return dateToConvert.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
    }

    public static Date toDate(LocalDate localDate) {
        return Date.from(
                localDate.atStartOfDay()
                    .atZone(ZoneId.systemDefault())
                    .toInstant()
                );
    }

你可以用这个简单的方法找出两个日期之间的差异


在上述方法中,您可以将第一个参数作为许可证的当前日期和第二个参数到期日期传递

有关更多信息,请参阅此问题的答案
你可以用这个简单的方法找出两个日期之间的差异


在上述方法中,您可以将第一个参数作为许可证的当前日期和第二个参数到期日期传递

有关更多信息,请参阅此问题的答案

除了GUI内容之外,您还可以发布您迄今为止(在java中)尝试过的内容吗?关于查找两个日期之间的差异的类似问题:@JG7-我认为此链接没有帮助,我只有一个日期字段,然后是用户输入的许可证可用天数。我试图从本质上做到这一点>>>>今天(2019年6月24日)+700天=新日期我建议您不要使用
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。相反,请使用
LocalDate
DateTimeFormatter
,这两种格式都来自。刚刚看到Eduardo Eljaiek为您的应用程序编写了一个全新的现代答案。太棒了。除了GUI之外,你能发布你迄今为止(在java中)尝试过的东西吗?关于查找两个日期之间的差异的类似问题:@JG7-我认为这个链接没有帮助,我只有一个日期字段,然后是一个用户输入,表示许可证可用的天数。我试图从本质上做到这一点>>>>今天(2019年6月24日)+700天=新日期我建议您不要使用
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。相反,请使用
LocalDate
DateTimeFormatter
,这两种格式都来自。刚刚看到Eduardo Eljaiek为您的应用程序编写了一个全新的现代答案。太神了