将 datetimeoffset 数据类型与 jTDS 结合使用

2024-03-28

jTDS 目前不支持datetimeoffsetSQL Server 2008 中引入的数据类型。

任何人都可以建议是否有办法使用datetimeoffset使用 jTDS 键入?


正如在“下层客户端的向后兼容性”部分中提到的日期时间偏移文档 https://msdn.microsoft.com/en-CA/library/bb630289.aspx,我们可以使用字符串表示datetimeoffset价值观。事实上,如果我们检索一个datetimeoffsetjTDS 1.3.1 的值我们得到java.lang.String形式的价值

YYYY-MM-DD hh:mm:ss[.nnnnnnn] {+|-}hh:mm

这样的值可以这样解析:

// rs is our ResultSet object
String valueRetrieved = rs.getString(1);  // e.g., "2016-12-08 12:34:56.7850000 -07:00"
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSS ZZZZZ");
ZonedDateTime zdt = ZonedDateTime.parse(valueRetrieved, dtf);

至于写一个datetimeoffset值到 SQL Server,jTDS 无法使用以下命令正确处理更新.setTimestamp,例如,在我的机器上......

java.sql.Timestamp ts = java.sql.Timestamp.valueOf("2016-12-08 12:34:56.785");  // local
String tsString = formatTimestampForDateTimeOffset(ts);  // (see below)
System.out.printf("             java.sql.TimeStamp value: %s (%d ms since epoch)%n", tsString, ts.getTime());

System.out.println();
System.out.println("Saving via setTimestamp ...");
String sqlUpdate = "UPDATE dtoTable SET dtoCol = ? WHERE id=1";
try (PreparedStatement s = conn.prepareStatement(sqlUpdate)) {
    s.setTimestamp(1, ts);  // pass the Timestamp itself
    s.executeUpdate();
}
String valueRetrieved;
try (
        Statement s = conn.createStatement();
        ResultSet rs = s.executeQuery("SELECT dtoCol FROM dtoTable WHERE id=1")) {
    rs.next();
    valueRetrieved = rs.getString(1);
    System.out.printf("    jTDS saved the TimeStamp value as: %s%n", valueRetrieved);
}

...产生...

         java.sql.TimeStamp value: 2016-12-08 12:34:56.785 -07:00 (1481225696785 ms since epoch)

Saving via setTimestamp ...
jTDS saved the TimeStamp value as: 2016-12-08 12:34:56.7870000 +00:00

...这不仅错误地将时区偏移设置为+00:00(没有更改日期/时间值本身),而且还增加了几毫秒只是为了好玩。

但是,如果我们将时间戳值转换为格式正确的字符串,例如......

public static String formatTimestampForDateTimeOffset(java.sql.Timestamp ts) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ZZZZZ");
    String s = sdf.format(new Date(ts.getTime()));
    // T-SQL *requires* the colon in the timezone offset: -07:00, not -0700
    int colonPosition = s.length() - 2;
    return s.substring(0, colonPosition) + ":" + s.substring(colonPosition);
}

...并使用.setString代替.setTimestamp,那么datetimeoffset值已正确保存:

Saving via setString ...
jTDS saved the formatted String as: 2016-12-08 12:34:56.7850000 -07:00
           parsed to ZonedDateTime: 2016-12-08T12:34:56.785-07:00
              converted to Instant: 2016-12-08T19:34:56.785Z
       converted to java.util.Date: Thu Dec 08 12:34:56 MST 2016
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 datetimeoffset 数据类型与 jTDS 结合使用 的相关文章

随机推荐

  • 交换位置 (HC11)

    我只是在玩我的MC 68HC11 在 C 中 我可以通过执行以下操作来执行简单的字节交换 swapped num gt gt 24 0xff move byte 3 to byte 0 num lt lt 8 0xff0000 move b
  • Java Grpc:使 dns 缓存无效

    我有一个 grpc 客户端指向一个解析为 2 个 IP 地址的 url 问题是 当一个服务器节点出现故障然后恢复时 grpc 客户端不会选择它 所有负载都会转移到单个节点 我尝试建议改变networkaddress cache ttl财产
  • 如何从 Maya 事件中获取场景中高亮对象的变化?

    我正在使用 Maya2014 pyqt4 8 python2 7 我正在开发一个应用程序 它可以让您加快并简化 Maya 中项目的选择 是一个选择器 用户可以将其附加到场景中的对象 选择窗口中的对象会导致场景中对象的分离 但相反我找不到怎么
  • 用于匹配带有尾随空格的字符串的正则表达式在 Perl 中有效,但在 Python 中无效

    我试图找到具有尾随空格的字符串 即 foo 而不是 foo 在 Perl 中 我会使用 str foo print Match n if str s 当我在 Python 2 6 中尝试这个时 例如 import re str foo if
  • 更改路径颜色而不更改以前的路径

    我想创建一个小型绘画应用程序 我可以在其中使用一些颜色进行绘制 但我只测试了一种颜色更改 直到现在它无法正常工作 当我单击按钮并开始使用新颜色进行绘图时 我之前所做的所有绘图也会更改颜色 有人能帮我吗 public class MyTouc
  • 如何通过 $_GET 接受 URL 中的哈希标记?

    据我所知 井号 不会发送到服务器 因此我似乎无法使用原始 PHP 来解析数据 如下面的 URL 所示 index php name Ben address 101 S 10th St Suite 301 我希望使用 GET 数据预先填充表单
  • 我可以使用自回归建模进行信号去噪吗?

    如下 我的任务是使用 AR 建模来消除噪声信号中的伪影 假设我有原始数据中的心电图或肌电图 在 IEEE 上 我发现这可以通过小波变换 巴特沃斯滤波器或经验模式分解来实现 https www kaggle com residentmario
  • 如何从 json 对象初始化结构

    嗨 我是个新手 无法迅速提出任何想法 如何从 json 对象初始化结构 我不知道我该怎么做 用户 名称 cruskuaka 电子邮件 电子邮件受保护 cdn cgi l email protection 电话号码 018833455 地址
  • 将月份从名称转换为数字

    有没有简单的方法可以改变 month July 以便 nmonth 7 07也会好的 我可以做一个 case 语句 但肯定已经有一个要转换的函数了 编辑 我希望我能接受多个答案 因为你们两个基本上通过你们的力量组合给了我我所需要的东西 nm
  • 我可以在oracle中创建参数化视图吗

    我有一个这样的查询 SELECT ID REF ID BATCHNO FROM reporttbl where POSTING DT gt 06 01 2020 and POSTING DT lt 06 30 2020 我每个月都需要它 所
  • 为什么 Android 的 HttpUrlConnection 不支持 HTTP/2?

    我刚刚发现Android推荐的http客户端HttpUrlConnection不支持 HTTP 2 是否有特定原因不在 Android 上使用 HTTP 2 如果你想利用 HTTP 2 你可以使用 OkHttp https github c
  • SQL 一对多匹配多侧中的一侧 by ALL

    在下面的一对多中 CREATE TABLE source id int name varchar 10 PRIMARY KEY id CREATE TABLE params id int source int value int 其中 pa
  • 对数据进行分组并绘制多条线

    我想在 R 中为此数据集绘制多条线 x Year y Value School ID Year Value A 1998 5 B 1998 10 C 1999 15 A 2000 7 B 2005 15 每个学校都有不同年份的数据 我希望每
  • 设置输入占位符的样式,我该怎么做? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 CSS 更改输入的 HTML5 占位符颜色 https stackoverflow com questions 2610497 change an inputs html5 placeholde
  • 如何将 argv[] 获取为 int?

    我有一段这样的代码 int main int argc char argv printf d t int argv 1 printf s t int argv 1 在外壳中我这样做 test 7 但第一个 printf 结果不是 7 我怎样
  • fscanf 无法正确读取浮点数

    这是一个家庭作业问题 我在使用 fscanf 从文本文件读取浮点值时遇到问题 基本上我试图从文件中读取浮点值并将它们存储在动态数组中 输入文件每行有两个浮点数 所以一行可能是 0 85 7 34 不带引号 所以我尝试使用 fscanf fp
  • 如何使用flask-ReSTplus记录帖子正文?

    如何记录预期发布的输入正文value字段出现以便用户知道要发布什么 目前使用以下数据 customer id service id customer name site name service type 我们可以使用上面的 json 来默
  • 将同步代码包装为异步任务的最佳方法是什么?

    我正在实现一个异步接口方法 返回任务 然而 我的实现必然是同步的 最好的方法是什么 有一些内置的方法可以做到这一点吗 以下是我正在考虑的几个选项 选项 1 Task FromResult return Task FromResult Com
  • 如何轮询目录以检查是否添加了新文件?

    我想轮询一个目录以检查是否有新文件添加到该目录中 如果添加了任何新文件 我想读取该文件 有人可以告诉我如何做到这一点吗 Java 7 有一个文件观察器API http java dzone com news how watch file s
  • 将 datetimeoffset 数据类型与 jTDS 结合使用

    jTDS 目前不支持datetimeoffsetSQL Server 2008 中引入的数据类型 任何人都可以建议是否有办法使用datetimeoffset使用 jTDS 键入 正如在 下层客户端的向后兼容性 部分中提到的日期时间偏移文档