为什么在Java中查询日期BC变成AD?

2023-12-20

我的Java程序连接到一个数据库(Oracle XE 11g),其中包含许多日期(OracleXE的日期格式设置为syyyy/mm/dd)。

在数据库中使用负日期(基督之前)进行查询效果很好。当我用Java做的时候,它们都变成了AD(Anno Domini)。如何在 Java 中检索关于 AD/BC 的日期?

我的 Java 代码对数据库进行查询并将结果放入表中。

try {
    Object item=cbPD.getSelectedItem();                                 
    String dacercare=item.toString();
    query = "SELECT DISTINCT PD.Titolo,PD.Inizio,(Select E.nome From Evento E WHERE PD.Inizio_Evento=E.CODE),
            PD.Fine, (Select E.nome From Evento E  WHERE PD.Fine_Evento=E.CODE ) FROM Periododelimitato PD WHERE PD.Titolo=?";
    PreparedStatement stAccess = Login.connessione.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    stAccess.setString(1,dacercare);
    rset = stAccess.executeQuery(); 
    j = modelPD.getRowCount();
    for (i=0; i<j; i++) modelPD.removeRow(0);
    Date data;
    while (rset.next()) {
        data = rset.getDate(2);
        modelPD.addRow(new Object[]{rset.getString(1),data, rset.getString(3), rset.getString(4), rset.getString(5)});
    }       
}

Here an Example使用特定查询:

try {
    query = "SELECT PD.Inizio FROM PeriodoDelimitato PD WHERE PD.CodP=?";
    String dacercare="8"; //look for record with this specific Primary key
    PreparedStatement stAccess = Login.connessione.prepareStatement(query,
            ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    stAccess.setString(1, dacercare);
    rset = stAccess.executeQuery(); 
    while(rset.next()) {
        Date dateBC = rset.getDate(1);
        modelPD.addRow(new Object[]{null, dateBC, null, null, null});
    }

Output在Java中是:

0509-01-01

Output在 Sql Developer 中使用相同的查询(用指定的主键替换 ?):

-0509/01/01

查询时注意:本例中选择的列在 Oracle 中是 DATE 类型。

添加信息:DBMS是Oracle(XE 11g),DB是在IDE(SQL开发人员)上构建的。该程序是通过 Netbeans 8.2 用 Ja​​va 编写的。我连接到 Netbeans 中的数据库,添加库“ojdbc6.jar”。


首先,目前还不清楚您应该如何处理历史日期,尤其是史前日期,以及您应该期望它们如何表现。这不是我知道的事情,但我怀疑今天常用的任何日历都是在公元前六世纪(在共同纪元之前,“BC”)使用的。也许您已经知道了,我只是想向阅读此答案的其他人提及这一点。

感谢巴兹尔·布尔克(Basil Bourque)(现已删除)的回答,您所观察到的似乎是预期的行为java.sql.Date。我尝试打印公元 2 年(公元,“公元”)和公元前 2 年的日期并进行比较。前 2 个 CE:

    LocalDate ld = LocalDate.of(2, 1, 1);
    java.sql.Date sqlDate = java.sql.Date.valueOf(ld);
    System.out.println("java.sql.Date " + sqlDate + " millis " + sqlDate.getTime());

java.sql.Date 0002-01-01 毫秒-62104237200000

这正如预期的那样。对于公元前 2 年,我们需要提供 -1LocalDate因为 0 表示 1 BCE,-1 表示 2 BCE。插入LocalDate.of(-1, 1, 1)在上面的代码中,输出是

java.sql.Date 0002-01-01 毫秒-62198931600000

我们注意到打印的日期是相同的。 0002 并不是完全错误的,但它并没有告诉我们现在是公元 2 年还是公元前 2 年。我相信这可以解释您观察到的行为。接下来我们注意到毫秒值不同,因此日期应该不同。差异为 94694400000 毫秒,相当于 1096 天,如果其中一年是闰年,则相当于 3 年。闰年可能会令人惊讶,但除此之外我认为这是正确的。

不过,还是有一些可疑之处。当我将 sql 日期转换回LocalDate,时代迷失了,我总能在普通时代有个约会。由于您不需要这种转换,因此您可能不需要关心。

我相信好的解决方案是放弃过时的Date完全上课并使用现代LocalDate自始至终。您应该知道,这遵循所谓的公历 https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar,这可能并不总是给出与Date。此外,这还需要兼容 JDBC 4.2 的驱动程序,因此您的ojdbc6.jar不会的。尽管这可能意味着你被阻止了,但我让这个建议代表其他阅读的人。我没有测试过,但我认为以下应该有效:

LocalDate dateBC = rset.getObject(1, LocalDate.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在Java中查询日期BC变成AD? 的相关文章

  • 如果执行没有事务的删除语句,是否会删除部分内容?

    如果表myTable包含100000000条记录 我执行DELETE FROM myTable 没有开始交易并且出现问题 例如服务器电源故障 会删除一些记录吗 否 如果数据库引擎符合ACID http en wikipedia org wi
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • SQL Group BY,每个组的前 N ​​个项目

    我有一个 SQL 查询 可以获取给定商店中销量最高的 5 件商品 SELECT TOP 5 S UPCCode SUM TotalDollarSales FROM Sales S WHERE S StoreId 1 GROUP BY S U
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序
  • 案例陈述以确定我是否应该结合

    我目前想做某种条件联合 给出以下示例 SELECT age name FROM users UNION SELECT 25 AS age Betty AS name 假设我只想在 用户 计数 gt 2 时合并第二个语句 否则不合并两者 总之

随机推荐

  • 动态添加到 Highcharts

    我有一个 json 对象 我正在尝试将其添加到我的 highcharts 选项中 我可以通过 API 接收该对象 并将其传递给我的 highcharts 函数 但我无法将我的数据添加到它周围的静态数据中 var datas datas ge
  • 使用声明性数据绑定 ASP.NET 进行评估

    我一直在尝试使用声明性数据绑定 ASP NET 并与幕后发生的 魔法 作斗争 我如何让它在 ASP Net 2 0 中工作 这是在数据范围内FormView控制
  • 从提交历史记录中获取 GitHub 用户名

    我将一个存储库克隆到我的机器上 然后做了 git log 但在日志中 它显示了该人的全名和电子邮件 而不是他们的 github 用户名 有没有一种方法可以在不依赖 GitHub 网站的情况下将提交与用户关联 如果你想使用 git log 似
  • Google Sheets 功能可对行进行分组和连接

    样本表 https docs google com spreadsheets d 1AeP0sxDi0 3aaesUdCNTKfricIimjTMFaKO FX9 g50 edit usp sharing https docs google
  • 如何使用 htaccess 从 url 中删除 GET 参数?

    我的网站除了一页之外不使用任何 GET 参数 尽管如此 我可以看到 Google 成功地使用 GET 参数索引了我的一堆页面 这对于 SEO 重复内容 来说不太好 因此 我尝试编辑 htaccess 以在所有带 GET 参数的 url 到不
  • 订阅我自己的 C# 事件会造成内存泄漏吗?

    如果基类发布 C 事件并且派生类订阅该事件 即订阅其自身 事件订阅会阻止对象被垃圾收集吗 或者垃圾收集器是否足够聪明来检测这种循环引用情况 乍一看 似乎应该如此 但我很确定我已经看到了执行此操作的控制代码 这是一个如此基本的问题 我不敢相信
  • 在 jquery 中获取数据绑定值

    我正在使用 knockout js 设置跨度值 HTML 代码 span span 这工作正常并在用户界面上显示用户名 我正在尝试从 js 文件中获取该值 使用下面的代码 alert this attr data bind 这是这样的服务结
  • 调整 UITextField 或 UITextView 出现键盘时的界面

    我有一个表格 每个单元格都包含一个标签和一个文本字段 问题是 当我去编辑最后一行时 键盘隐藏了表格的下部 我看不到正在输入的内容 如何将界面移动到键盘上方以便看到正在输入的内容 谢谢 穆斯塔法 你需要注册你的 viewControllerU
  • Android + 致命异常:Timer-0(使用计时器删除 ImageView)

    在我的 Android 应用程序中 我使用计时器来使用 TIMER 显示相应的 ImageView 我收到一个错误 02 27 06 39 33 999 E AndroidRuntime 1325 FATAL EXCEPTION Timer
  • UISegmentedControl 选择的索引始终为 0?

    我有一个 UISegmentedControl 它有 6 个段 是我在 Interface Builder 中创建的 我在值更改时调用以下方法 IBAction segmentedChartButtonChanged id sender s
  • appView.addJavascriptInterface() 不适用于 API 17

    我可以使用我的phonegap java脚本函数和android 2 2中的java函数 但相同的代码不在 API 17 上运行 我应该做什么才能从 API 17 中的 java 脚本调用本机 java 代码 我在我的java文件中使用这个
  • JAXB 解组中 XML 中的命名空间存在问题

    我有一个 XML 需要使用 JAXB 进行解组 如果我从元素中删除所有命名空间属性 则代码可以正常工作 但如果保留命名空间属性 则在解组后会得到一个空对象 XML 是这样的
  • 不允许使用 POST 动词

    有点基本 但我尝试了一些方法来解决以下错误 但无法得到正确的解决方案
  • 如何在 javascript 中使用 clojurescript 的复杂返回对象

    我想编写一个 clojurescript 函数 它返回一个复杂的项目 例如 foo bar 或 list foo bar 并且我希望能够从 javascript 调用此函数并获取返回值 如何做呢 就我而言 我要返回的向量 列表 集合中的项目
  • 将字符串/字符转换为C++中的类成员/方法

    有没有办法将字符串或字符转换为类成员 成员函数以动态访问它们 对于前 这个特定的代码 include
  • Adb 安装失败:INSTALL_CANCELED_BY_USER

    我尝试通过 adb 安装应用程序并收到错误 adb d install Users dimon Projects one place myprogram platforms android build outputs apk android
  • OpenGL ES - 如何使用/不同的 Alpha、旋转和比例批量渲染 500 多个粒子?

    我正在开发一款 iOS 游戏 需要一次渲染 500 800 个粒子 我了解到 在 OpenGL ES 中批量渲染许多精灵而不是调用是一个好主意glDrawArrays 在游戏中的每个精灵上 以便能够渲染更多精灵而不大幅降低帧速率 我的问题是
  • 添加 PictureBox 鼠标按下事件

    我想让这个活动成功 private void pictureBox1 MouseDown object sender System Windows Forms MouseEventArgs e code 我知道我必须添加一个事件才能使其工作
  • 当 Apache Web 服务器使用 mod_jk 连接 Tomcat 时启用 SSL

    I have usr local tomcat webapps cas 我的 java 应用程序正在运行 当我尝试连接 Tomcat 和 Apache Web 服务器 httpd 之后http 192 168 0 117 cas我可以看到登
  • 为什么在Java中查询日期BC变成AD?

    我的Java程序连接到一个数据库 Oracle XE 11g 其中包含许多日期 OracleXE的日期格式设置为syyyy mm dd 在数据库中使用负日期 基督之前 进行查询效果很好 当我用Java做的时候 它们都变成了AD Anno D