【问题标题】:What is the correct DateTimeFormatter pattern for datetimeoffset columndatetimeoffset 列的正确 DateTimeFormatter 模式是什么
【发布时间】:2021-02-21 20:18:35
【问题描述】:

通过 datetimeoffset 列查询 SQL Server 表的正确 DateTimeFormatter 模式是什么。当我执行以下查询时,我得到了结果。我应该使用什么模式从 Java 应用程序运行相同的查询?

SELECT *
FROM
       TABLE
WHERE
       CreateTimestamp >= '2020-07-06 06:00:00.0000000 +00:00'

下面是我用来转换日期的java代码sn-p:

public String convertToDatabaseColumn(OffsetDateTime offsetDateTime) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS Z");
        return offsetDateTime.format(formatter);
    }

下面是设置参数并执行查询的sn-p

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 Z 如果您再次检查,您会注意到在dH 之间有一个-,而不是T' '
  • 数据库中CreateTimestamp的数据类型是什么?你不是使用内置的timestamp with time zone 数据类型吗?如果不是为什么不呢?我当然认为你应该。 (不知道它在 SQL Server 中的确切名称,但肯定有一个等价物。)

标签: java sql sql-server datetimeformatter


【解决方案1】:

您需要使用yyyy-MM-dd HH.mm.ss.SSSSSS xxx 模式。从DateTimeFormatter的文档中查看以下语句:

模式字母'X'(大写)将在偏移量为时输出'Z' 输出将为零,而模式字母“x”(小写)将 输出“+00”、“+0000”或“+00: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

注意:您的模式中还有一个拼写错误,- 位于 ddHH 之间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2023-03-21
    相关资源
    最近更新 更多