首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期将以java中的非英语os表示。

问日期将以java中的非英语os表示。
EN

Stack Overflow用户
提问于 2017-01-25 23:05:12
回答 1查看 132关注 0票数 0

在我的项目中,new ();用其他语言给出日期。这是给错误,谁能提供解决方案,转换达尔特的英语?

我的代码如下:

代码语言:javascript
复制
    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.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 00:34:55

tl;dr

  • 为您的Locale指定SimpleDateFormat
  • 修复格式模式,yyyy-MM-dd
  • 最好使用java.time类,而不是这些麻烦的遗留类。

字符串中的当前日期:

代码语言:javascript
复制
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类表示一个日期纯值,没有一天的时间,也没有时区.

代码语言:javascript
复制
LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;

关于java.time

java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.Date、Calendar和SimpleDateFormat。

尤达-时间项目现在在维护模式中,建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310。

在哪里获得java.time类?

  • Java 8和东南9以及后来的
    • 内置的。
    • 带有捆绑实现的标准Java的一部分。
    • Java 9添加了一些次要的特性和修复。

​

​

​

三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和更多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41863314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档