当前位置: 首页 > 面试题库 >

JPA TemporalType.Date给出错误的日期

郎鸿
2023-03-14
问题内容

我有一个具有日期字段的类,该日期字段表示一条数据的“有效起始日期”。定义如下:

@Temporal( TemporalType.DATE )
private Date validFrom;

从我从数据库中提取日期并显示它的那一点似乎一切正常。如果我在前端选择日期2003年9月18日,那么当我检查数据库时要保存足够的日期,即保存日期(数据库为MySQL
5.5.9列类型为DATE)。但是,当我调出列表记录时,显示的日期是2003年9月17日-提前一天。

如果我选择年初或晚于2003年3月26日或2003年12月25日这样的日期,那么一切都很好,所以我猜想这与夏令时有关,但是错误在哪里蔓延?由于数据库似乎保存了正确的日期,我猜想它一定是JPA转换回java.util.Date时的日期-
java.util.Date是用于日期的最佳类吗?我已经看到了一些人们使用Calendar的示例,但是看起来很沉重,并且我不确定它是否可以与基于JSF的前端配合使用。


问题答案:

经过大量的实验和搜索,我很确定我已经找到了问题的原因。该日期保存在java.util.Date中,其中包含所有时间和时区。似乎JPA正在从数据库中读取日期2003年9月18日,然后像这样填充日期:“
Thu Sep 18 00:00:00 BST
2003”-请注意,时区已设置为BST,可能是因为它不是由数据库明确设置。无论如何,如果只想看这样的日期,则有必要在JSF页面中格式化输出:

<h:outputText value="#{t.validFrom}">
    <f:convertDateTime pattern="dd MMM yyyy"/>
</h:outputText>

但是,这假定时区是机器上当前有效的时区。在我的情况下,时区当前为格林尼治标准时间(因为它是冬天),因此当显示日期“ Bhu 2003 Thu Sep 18
00:00:00 BST”时,它将减去一小时将其转换为GMT,从而显示2003年9月17日。



 类似资料:
  • 问题内容: 我创建了一些小的方法作为Util类,例如以下代码: 并且,进行了非常简单的运行,如下所示: 结果是一个很奇怪的日期-> 2017/07/187 搜索了类似的问题,并尝试了TimeZone,Locale,但没有帮助。有什么建议 ? 顺便说一句,这是我的环境: Windows7 x86 JDK 1.8.0.131 x86 Oxygen corrosion of x86 问题答案: 您格式化

  • 问题内容: 我有一个简单的方法,应该获取当前日期,将其放入某种格式,然后将其作为String返回。到目前为止,一切都很好(上次尝试于1月31日进行),但由于某种原因,当我今天尝试使用它时,它返回字符串“2013-02-43”。 显然,二月份没有43天,而且我不知道为什么要返回此日期。我到处都在寻找解决方案,但似乎没有一个适合我遇到的特定问题。这是代码: 仅出于记录目的,我尝试使用Calendar.

  • 我有一个简单的方法,可以获取当前日期,将其转换为特定格式,然后作为字符串返回。到目前为止,它还不错(上次尝试是在1月31日左右),但由于某种原因,当我今天尝试它时,它返回字符串“2013-02-43”。 现在很明显,2月份没有43天,我不知道为什么它会返回这个。我到处寻找解决方案,但似乎没有一个适合我的具体问题。以下是代码: 为了记录在案,我尝试过使用Calendar.get实例()等。结果相同。

  • 我试图用< code>Proguard生成一个APK,每次都出现这个错误。它警告我一些我找不到的内部类,并且名称看起来很模糊,如下所示: 类错误:(b . a . a . a . a . a . b . o) 这是我的proGuard文件: 这是我得到的完整错误日志: 错误:警告:忽略匿名内部类的“内部类”属性 错误:(b.a.a.a.a.b.o) 未附带“错误:关联的封闭方法”属性。此类可能是由

  • 我使用下面的代码来格式化日期。但是当我以不正确的格式给出数据时,它会给出意想不到的结果。 在上述情况下,输出为-formattedVal:0009-02-05。 它不是抛出解析异常,而是解析值并给我一个不正确的输出。有人能帮我理解这种反常的行为吗。

  • 问题内容: 我从控制器中的java()发送此日期,输入的类型为 如下: 当我得到这个日期与ajax为: 转换成 那么,为什么我得到错误的一小时约会呢? 解 我们通过以下方式解决它 因为这是夏令时(DST)或夏令时的问题。好文章 问题答案: 我认为这可能是 夏令时的 问题。您可以检查客户端的时区和服务器的时区。(Web服务器或SQL Server)