如何在spring boot中使用日历,

ajsxfq5m  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(608)

在控制器中

@RequestMapping(value = "/testCalendar")
public String testCalendar(Calendar time){

    System.out.println(time == null);

    return "request ok" ;
}

在浏览器中打开以下url:127.0.0.1:8090/test/testcalendar
它得到了下面的错误消息 springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.Calendar]: Is it an abstract class?; nested exception is java.lang.InstantiationException] with root cause java.lang.InstantiationException: null atsun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 如果我想得到空日历,我该怎么办?
我试试这个

@InitBinder
    public void initBinder(WebDataBinder binder) {
     binder.registerCustomEditor(Calendar.class, new CalendarEditor());
     binder.registerCustomEditor(Date.class, new DateEditor());
    }

但还是不行,请帮帮我。

jchrr9hc

jchrr9hc1#

受保护的

我想问题是 Calendar 是一个 protected 班级。所以你不能从一个不相关的类示例化。看看这个答案。
另一种方法是使用普通的后备班, GregorianCalendar .

java.time文件

更好的解决办法是避免 Calendar 以及 GregorianCalendar 总而言之。这些都是设计得非常糟糕的类,有很多缺陷。它们在几年前被jsr310所取代,jsr310由java.time类实现。

分区日期

取代 GregorianCalendarZonedDateTime .

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;  // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).

缺少无参数构造函数

请注意,java.time类故意缺少公共构造函数。这也意味着缺少arg构造函数。相反,他们使用工厂方法,如 ZonedDateTime.now 见上图。作为指导,学习java.time命名约定。
如果您有一个框架需要一个无arg构造函数,那么您需要找到一个解决方法或适应环境。

关于java.time

java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .
现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线 java.sql.* 班级。
从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9添加了一些次要的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android包java.time类的更高版本实现。
对于早期的android(<26),threetenabp项目采用了threeten backport(如上所述)。了解如何使用threetenabp…。
threeten额外的项目用额外的类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,等等。

相关问题