在我的项目中,new ();用其他语言给出日期。这是给错误,谁能提供解决方案,转换达尔特的英语?
我的代码如下:
model.put("total", timeSheetTempDAO.getCurrentDayHours(SessionManagement.getCurrentUserId(),new SimpleDateFormat("YYYY-MMM-dd").format(new Date())));错误:类型日期的输入语法无效:"२०१७-जनवरी-२६“位置:136号org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56) org.hibernate.loader.Loader.getResultSet(Loader.java:2040) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816)org.hibernate.loader.Loader.doQuery(Loader.java:900) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) org.hibernate.loader.Loader.doList(Loader.java:2526) org.hibernate.loader.Loader.doList(Loader.java:2512) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342) org.hibernate.loader.Loader.list(Loader.java:2337) org.hibernate.loaderorg.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357) org.hibernate.engine.
发布于 2017-01-26 00:34:55
tl;dr
Locale指定SimpleDateFormatyyyy-MM-dd字符串中的当前日期:
LocalDate.now(
ZoneId.of( "America/Montreal" )
).toString()调试时简化代码
撕开代码来调试这类问题。你展示了一长串复杂的代码。一旦分离,您将看到这个问题与Postgres无关,也与JDBC/Hibernate无关。
不正确格式模式
您使用的SimpleDateFormat格式代码不正确。大写Y指的是周年而不是日历年。三重M表示月份的名称,而不是数字。对于SimpleDateFormat,使用类(但实际上应该使用java.time类)。
通过JDBC传递对象,而不是字符串
不要将日期-时间值作为字符串通过JDBC传递到数据库。使用日期-时间类型。JDBC的目的之一是弥合Java类型和数据库数据类型之间的差异。搜索堆栈溢出的"JDBC“和"LocalDate”,以获得更多的讨论和示例。
时区
你忽略了时区的问题。
时区是确定日期的关键。在任何特定时刻,全球各地的日期因地区而异。例如,午夜后几分钟在法国巴黎是一个新的一天,而仍然“昨天”在魁北克省。
SimpleDateFormat类隐式应用JVM当前的默认时区。所以你的结果可能会有所不同。最好始终显式地指定所需/预期的时区。
现场
同样,在生成表示日期时间值的字符串时,您忽略了Locale的问题.Locale决定:(a)用于翻译日名、月名等的人类语言;(b)决定缩略语、大写化、标点符号等问题的文化规范。顺便说一句,地区与时区无关。
SimpleDateFormat类隐式地使用JVM当前的默认Locale。最好始终显式地指定所需/预期的区域设置。也许是Locale.UK或者Locale.ENGLISH。
java.time
您正在使用麻烦的旧日期时间类。我建议您了解java.time类并考虑它们的使用,尽管我不知道Hibernate中对java.time的支持。
LocalDate
LocalDate类表示一个日期纯值,没有一天的时间,也没有时区.
LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;关于java.time
java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
尤达-时间项目现在在维护模式中,建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310。
在哪里获得java.time类?
三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和更多。
https://stackoverflow.com/questions/41863314
复制相似问题