我有一个SQL Server数据库,其中一些列具有datetime类型,但仅存储时间部分均为零的日期。
在SQL上运行的Java web应用程序使用JSF和Hibernate读取WebSphere数据并输出到WebSphere。如上所述的Date列将日期显示为前一天。是哪个组件导致了这种情况,我应该如何修复它?
实现细节如下。
SQL Server中的列具有datetime类型,并包含类似于2020-02-01 00:00:00.000的数据。
Hibernate表定义将其作为类型为java.sql.Timestamp的键列。
<key-property name="contractBeginDate" column="Contract_Begin" type="java.sql.Timestamp" length="23">
<meta attribute="field-description">
@hibernate.property
column="Contract_Begin"
length="23"
</meta>
</key-property>获取数据的Hibernate查询定义如下。
<query name="getSalesConsultantServiceContractsSold_agreementDate_asc" cacheable="false"><![CDATA[
FROM VServiceAgreementsList vsal
WHERE vsal.slmsCode = :slmsCode
AND vsal.teamEliteYear = :year
ORDER BY vsal.contractBeginDate ASC
]]></query>表的Java类对字段使用java.util.Date类型,对该列使用get-method。
最后,带有支持bean的JSP文件生成HTML输出,其中dataTable的列中包含以下内容。
<h:outputText id="text8" value="#{varServiceAgreementSalesList.contractBeginDate}" styleClass="outputText">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>上面给出的数据示例输出为31/01/2020,比正确的日期早一天。
我假设以某种方式涉及到时区差异。
所有用户都在澳大利亚,并且他们的PC时区可能设置在从UTC+8到UTC+11的任何地方,所以可能原始值被解释为当地时区,转换为协调时区(将是前一天),然后将时间截断。
发布于 2021-01-28 09:47:00
Trie将websphere位置设置为与SQL Server相同
https://stackoverflow.com/questions/65929678
复制相似问题