Java的date型数据可以计算吗_关于java:如何从Date变量和int变量计算新的Date值

本问题已经有最佳答案,请猛点这里访问。

我正在尝试创建一个包含许可证数据的小应用程序,我允许用户输入兑换日期和许可证长度。

我想创建一天的剩余字段,用户可以在其中查看他们剩余多少天,直到他们兑换了新许可证。

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

除了GUI内容之外,您能否发布到目前为止在Java中尝试过的内容?

关于发现两个日期之间的差异的类似问题:stackoverflow.com/questions/5351483/

@ JG7-我认为此链接无济于事,我只有一个"日期"字段,然后是一个用户条目,其中列出了许可证可用的天数。 我正在尝试基本上要这样做>>>>>今天(24/06/2019)+ 700天= newDate <<<<<

我建议您不要使用SimpleDateFormat和Date。 这些类的设计很差,而且已经过时了,特别是前者非常麻烦。 而是使用来自现代Java日期和时间API java.time的LocalDate和DateTimeFormatter。

刚刚看到Eduardo Eljaiek在这里为您写了一个崭新的现代答案。 惊人。

假设您之前(通过数据库或类似方式)以某种方式收到许可证截止期限,则可以使用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);

}

}

Please note the use of the modern API, which is recommended to use nowadays.

编辑

对于您不想重构整个代码的情况,这里有两种方法来处理从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()

);

}

您可以使用此简单方法两个找出两个日期之间的差异

public void printDifference(Date startDate, Date endDate) {

long different = endDate.getTime() - startDate.getTime();

System.out.println("startDate :" + startDate);

System.out.println("endDate :"+ endDate);

System.out.println("different :" + different);

long secondsInMilli = 1000;

long minutesInMilli = secondsInMilli * 60;

long hoursInMilli = minutesInMilli * 60;

long daysInMilli = hoursInMilli * 24;

long elapsedDays = different / daysInMilli;

different = different % daysInMilli;

long elapsedHours = different / hoursInMilli;

different = different % hoursInMilli;

long elapsedMinutes = different / minutesInMilli;

different = different % minutesInMilli;

long elapsedSeconds = different / secondsInMilli;

System.out.printf(

"%d days, %d hours, %d minutes, %d seconds%n",

elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds);  }

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

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

Android两个日期之间的差异

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);

Date firstDate = new Date();

Date secondDate = null;

secondDate = sdf.parse("06/30/2019");

long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime());

long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);

这可以在几天内给您答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值