微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

datetimeoffset列的正确DateTimeFormatter模式是什么

如何解决datetimeoffset列的正确DateTimeFormatter模式是什么

通过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的文档中检查以下句子:

当偏移量为0时,模式字母'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,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。