【发布时间】:2019-09-04 05:10:13
【问题描述】:
我已经使用休眠 JPA 在 MySQL 中插入了日期列,它插入了正确的日期和时间,但是当我在我的 java 代码中检索该列时,它给了我六个小时的延迟时间
这是我的模型 a.java:
import java.util.Date;
@CreationTimestamp
@Column(name = "Created_at", updatable = false, nullable = true)
private Date Created_at;
public Date getCreated_at() {
return Created_at;
}
public void setCreated_at(Date created_at) {
Created_at = created_at;
}
这是我的存储库代码:
@Repository
@Transactional
public interface abcRepository extends JpaRepository<abc, String> {
@Query(value = "select Created_at from tbl where UserId =:UserId", nativeQuery = true)
public List<Object[]> getList(@Param("UserId")String walletUserId);
}
这是我检索数据的主要代码:
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> mapofStringObject = new LinkedHashMap<String, Object>();
List<Object[]> listDetails = null;
listDetails = abc.getList(UserId);
for (Object[] o : listDetails) {
mapofStringObject = new LinkedHashMap<String, Object>();
mapofStringObject.put("paymentCreated_at", o[0]);
list.add(mapofStringObject);
}
我希望日期和时间像 mysql 表中一样 2019-09-04 10:23:31 但实际上它给了我输出 2019-09-04T04:53:31.000+0000 即晚了六个小时
我正在尝试这个我得到了
代码:
TimeZone tz = c.getTimeZone();
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss z");
System.out.println(sdf.format(c2.getTime()));
System.out.println("Current TimeZone is : " + tz.getDisplayName());
输出:
- 04/09/2019 05:24:33 UTC
- 当前时区是:协调通用 时间
在mysql中我试过了:
SELECT @@global.time_zone, @@session.time_zone;
输出
【问题讨论】:
-
你的时区是什么时候?我打赌它是 UTC 前 6 小时...
-
我已经编辑了代码,请你检查一下,告诉我哪里错了,这对@StephenC很有帮助
-
您所在位置与服务器所在位置之间的时区是否存在差异? Windows 时钟的时区是多少?服务器 windows 时钟的时区是什么?或者程序是否插入了服务器正在考虑/不了解的 TimeZone 的值?我们看不到任何实际生成日期值并将其插入的代码
-
您似乎将 UTC 时间存储在数据库中。这很好。但我的猜测是你显示它就像是当地时间一样。这可能会有所帮助:stackoverflow.com/questions/12487125/…
-
是的,我认为这是问题所在,但我不知道如何检查或设置它@CaiusJard
标签: java mysql hibernate spring-boot jpa