gpt4 book ai didi

java - 长度差-JTextField/日期

转载 作者:行者123 更新时间:2023-12-02 11:14:34 25 4
gpt4 key购买 nike

我的错误类型长度不​​同。
为什么?

private void txtMoisActionPerformed(ActionEvent e) {
java.util.Date date1 = jDateChooserDateDebut.getDate();
java.util.Date date2 = jDateChooserDateFin.getDate();
long CONST_DURATION_OF_DAY = 1000l * 60 * 60 * 24;

long diff = Math.abs(date2.getTime() - date1.getTime());
long numberOfMonths = diff/CONST_DURATION_OF_DAY;
txtMois.setText() = this.numberOfMonts;
affiche ("txtMois" + numberOfMonths);
}

最佳答案

我没有JCalendarJDateChooser的经验,也没有尝试编译以下代码,所以如果有错别字或错误,请多多包涵。

当我阅读the documentation of JDateChooser 时,它可以为您提供老式的java.util.Calendarjava.util.Date,但是很遗憾,它不能提供现代的java.time.LocalDateDate是一个时间点,因此将其转换为日期是脆弱的,因为它在全局各地从来都不是同一日期。因此,为了正确进行转换,我们需要时区。幸运的是,Calendar可以直接或间接地将其提供给我们。

所以我相信你应该尝试

LocalDate dateDebut = ((GregorianCalendar) jDateChooserDateDebut.getCalendar()).toZonedDateTime()
.toLocalDate();

同样适用于 jDateChooserDateFin/ dateFin。我假设从 Calendar返回的 getCalendar()对象实际上是 GregorianCalendar,几乎可以肯定是。如果您得到 ClassCastException,我们需要改用 Calendar.getTimeZone​(),它将变得更加复杂和繁琐,我希望现在也不会再使用它。

当上述方法起作用时,应该可以像这样继续:
long dureeLong = ChronoUnit.DAYS.between(dateDebut, dateFin);
String dureeString = String.valueOf(dureeLong);
txtMois.setText(dureeString);
affiche("txtMois: " + dureeString);

如果您想数月而不是几天,我认为最好使用
long numberOfMonths = Period.between(dateDebut, dateFin).toTotalMonths();

在某些特殊情况下,如果一个日期是一个月的29、30或31,而另一个月没有那么多天;但这通常会给您预期的结果。

关于java - 长度差-JTextField/日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com