我在我的应用程序中发现了一个奇怪的错误,每次我在JDatePicker上设置时,它都会比我希望设置的日期增加一个月。。更具体地说,我发现这个错误的原因是LocalDate对象月份与日期不一样?我知道这听起来很奇怪,但这确实是问题的原因。
currentlyChanging.getDate() <- returns LocalDate
datePicker.getModel().setDate(currentlyChanging.getDate().getYear(),
currentlyChanging.getDate().getMonth().getValue(),
currentlyChanging.getDate().getDayOfMonth());
上面的代码会将日期选择器设置为2020-11-15
,而不是2020-10-15
(因此会增加1个月)。经过进一步的调查,我注意到当我将这个LocalDate转换为Date时,一切都开始正常工作,尽管。。。有个问题。。。IntelliJ告诉我getMonth方法已被弃用,如果只是在这个小用例中,我不确定使用它是否安全。
Date aaa = Helper.convertToDateViaSqlDate(currentlyChanging.getDate());
datePicker.getModel().setDate(currentlyChanging.getDate().getYear(),
aaa.getMonth(),
currentlyChanging.getDate().getDayOfMonth());
---[helping method]---
public static Date convertToDateViaSqlDate(LocalDate dateToConvert) {
return java.util.Date.from(dateToConvert.atStartOfDay()
.atZone(ZoneId.systemDefault())
.toInstant());
}
我已经到处搜索过了,获得我需要的月份的最佳方法是使用LocalDate,但这一个是在我的实现中添加1个月,在我看来“-1”就像一个。。。怎么说。。。。这不是一个好的解决方案:D
有人能告诉我为什么这个错误会发生在第一时间,同时,如果有可能修复它而不使用“getMonth”的日期,因为这个方法是不推荐的?提前感谢:)
这是因为java.util.Date
将一月
视为月0
。因此,如果将1
设置为datePicker.getModel()
,它将被评估为二月
。这是java.util
date-time API的主要设计错误之一。另一方面,java.time.LocalDate
将一月
视为月1
(这似乎很自然)。
您的问题的解决方案是从LocalDate中获得的月份减去1
,然后将其设置为datePicker.getModel()即。
datePicker.getModel().setDate(currentlyChanging.getDate().getYear(),
currentlyChanging.getDate().getMonth().getValue() - 1,
currentlyChanging.getDate().getDayOfMonth());
下面是您的问题的快速演示:
import java.time.LocalDate;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
LocalDate localDate = LocalDate.of(2020, 1, 20);
System.out.println(localDate);
System.out.println(localDate.getMonth());
System.out.println(localDate.getMonthValue());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, localDate.getYear());
calendar.set(calendar.MONTH, localDate.getMonthValue());
calendar.set(Calendar.DAY_OF_MONTH, localDate.getDayOfMonth());
System.out.println(calendar.getTime());
}
}
输出:
2020-01-20
JANUARY
1
Thu Feb 20 21:14:28 GMT 2020
java.util
的日期-时间API及其格式化API,SimpleDateFormal
已经过时且容易出错(您刚刚体验过一个!),建议完全停止使用它们,并切换到现代日期-时间API。
从Trail: Date Time了解现代日期时间API。
导出const ProductCard=({product})=>{const{deleteProduct,addToCart}=useContext(ProductContext) }
我正在尝试使用JDatePicker来显示日历。然而,我只想显示月份和年份,而不是日期。 我试着四处寻找模型和JDatePickerImpl对象,但没有运气。 以下是我必须向JDatePicker展示的代码,来自文档: 提前谢谢! 注意:这是我的意思的图像。
问题内容: 我正在运行MySql Server 5.7.11,这句话: 是 不是 工作。给出错误: 但是以下内容: 正常工作 。 DATE的情况相同。 作为 附带说明 ,它在MySQL文档中有所提及: DATE类型用于具有日期部分但没有时间部分的值。MySQL检索并以’YYYY-MM-DD’格式显示DATE值。支持的范围是“ 1000-01-01”至“ 9999-12-31”。 即使他们也说: 无
设置FullCalendar加载的时候,初始化的day-of-month(就是初始化月份中的某一天),值为整数类型。 date只对周视图和天视图有效,月视图不需要这个属性,因为月视图会从头到尾显示整个月。 如果date未设置,month和year设置成当前月和当前年,则当前是几号,FullCalendar就从几号开始。如果date未设置,month和year没有设置为当前年和当前月。FullCal
问题内容: 我的开发机器上有8GB RAM,并试图运行Apache Tomcat(7.0.29)同时托管Artifactory(2.6.3)和Jenkins(1.479)。我试图找到Jenkins的内存需求,但看起来他们的Wiki断了。 在中,我添加了以下命令: 这应该将Tomcat的JVM的大小保持在(基本上)1到3 GB之间,为我留出足够的空间来容纳其他内容, 并 为Tomcat留出足够的内存
问题内容: 在React中,我试图使按钮增加一个状态存储的值。但是,使用下面的代码使用handleClick时,我的值设置为undefined或NaN。 你能告诉我为什么会这样吗?根据此处的文档,它应该是正确的:https : //facebook.github.io/react/docs/state-and- lifecycle.html 问题答案: 因为您使用的handleClick函数不正确