【发布时间】:2021-10-30 08:29:09
【问题描述】:
我有一个定义为 datetime(2) 的列,我必须以这种格式创建一个新日期 - 2016-01-01T19:33:15-05:00
Entity: private Date transactionTime;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date date = null;
try {
date = formatter.parse(formatter.format(new Date()));
} catch (ParseException e) {
e.printStackTrace();
}
obj.transactionTime(date);
它像这样插入到 SQL 中 - "2021-08-26 14:19:09.0000000" 但我需要以上述格式插入它。
【问题讨论】:
-
DATETIME和DATETIME2类型都没有时区信息。 -
即使 DATETIME 有时区信息,您在使用
Date时已经丢失了该信息。并且格式化然后再次解析它也是一个无用的往返。至少应该使用支持偏移的 SQL 类型,并在 Java 端使用java.time.OffsetDateTime。 -
您不将日期存储为字符串,而是将日期存储为日期数据类型并根据需要对其进行格式化。话虽如此,您可以在 sql server 中使用 DATETIMEOFFSET 数据类型,并且很可能它会按原样接受字符串文字。
标签: java sql-server spring-boot java-8