通过datetimeoffset列查询SQL Server表的正确DateTimeFormatter模式是什么。当我执行下面的查询时,我会得到结果。我应该使用什么样的正确模式来从java应用程序运行相同的查询?
SELECT *
FROM
TABLE
WHERE
CreateTimestamp >= '2020-07-06 06:00:00.0000000 +00:00'
下面是我用来转换日期的java代码片段:
public String convertToDatabaseColumn(OffsetDateTime offsetDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS Z");
return offsetDateTime.format(formatter);
}
下面是设置参数并执行查询的代码段
Date beginDt; // passed to the method as parameter
Date endDt; // passed to the method as parameter
OffsetDateTime beginDateTime = beginDt.toInstant().atOffset(ZoneOffset.UTC);
OffsetDateTime endDateTime = endDt.toInstant().atOffset(ZoneOffset.UTC);
params.put(BEG, convertToDatabaseColumn(beginDateTime));
params.put(END, convertToDatabaseColumn(endDateTime));
List<Map<String, Object>> newfuelList = sqlJdbcTemplate.queryForList(sqlForNewFuel, params);
我得到以下异常
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Conversion failed when converting date and/or time from character string.
您需要使用模式yyyy-MM-dd HH.mm.ss.SSSSSS xxx
。检查DateTimeFormatter文档中的以下句子:
当偏移量为输出将为零,而模式字母"x"(小写(将输出"+00"、"+0000"或"+000:00"。
演示:
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(
convertToDatabaseColumn(OffsetDateTime.of(LocalDateTime.of(2020, 7, 6, 6, 0, 0, 0), ZoneOffset.UTC)));
}
public static String convertToDatabaseColumn(OffsetDateTime offsetDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH.mm.ss.SSSSSS xxx");
return offsetDateTime.format(formatter);
}
}
输出:
2020-07-06 06.00.00.000000 +00:00
注意:您的模式中还有一个打字错误,dd
和HH
之间的-
。