java.sql.Date 如何处理负日期?

2024-01-22

我遇到过这样的情况:当从数据库读取日期时,Java 运行时返回某种“反转”毫秒值(在java.sql.Date)。毫秒值与天数大致相同,但从 0 年开始倒推。

只需重新启动 Java 运行时即可解决该问题。

但是:我发现 Java 几乎可以正确地处理这些“反转”值,除了工作日。

当您运行以下代码时:

System.out.println(new java.util.Date(253402214400000l));
System.out.println(new java.util.Date(-377648784000000l));

您将得到以下输出:

Fri Dec 31 01:00:00 CET 9999
Tue Dec 31 01:00:00 CET 9999

另一个例子:

System.out.println(new java.util.Date(-294192000000l));
System.out.println(new java.util.Date(-123967324800000l));

Result:

Mon Sep 05 01:00:00 CET 1960
Mon Sep 05 01:00:00 CET 1960

使用在线转换器时,特定第二行的结果将有所不同。它将产生接近真实正日期的负日期(年份为负):

Example1:
253402214400000 = Fri Dec 31 9999 01:00:00
-377648784000000 = Tue Oct 15 -9998 02:00:00

Example 2:
-294192000000 = Mon Sep 05 1960 02:00:00
-123967324800000 = Mon Aug 19 -1959 02:00:00

我还没有找到有关这个“主题”的任何信息。

那么,“倒置”日期背后的神话是什么?为什么 Java 几乎可以正确地处理它们? JDBC 的意义是什么ResultSet调用时返回“反转”毫秒值resultSet.getDate(1).getTime()?


当您在 Date 构造函数中传递负数时,它将被视为 1970 年 1 月 1 日之前的毫秒数。这Javadoc http://docs.oracle.com/javase/7/docs/api/java/sql/Date.html#setTime(long says:

日期 - 自 1970 年 1 月 1 日 00:00:00 GMT 起的毫秒数,不超过 8099 年的毫秒表示。负数 表示1970年1月1日之前的毫秒数,

当您尝试提供以下内容时,您可以看到得到的结果Long.MIN_VALUE and Long.MAX_VALUE在日期构造函数中。

DateFormat df = new SimpleDateFormat("d MMM yyyy G, HH:mm:ss.S Z");
System.out.println(df.format(new Date(Long.MIN_VALUE)));
System.out.println(df.format(new Date(Long.MAX_VALUE)));

IDEONE 演示 https://ideone.com/fzEOm5

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

java.sql.Date 如何处理负日期? 的相关文章

随机推荐

  • 使用 FFmpeg 从大电影创建缩略图需要太长时间

    我正在使用这个 shell 命令从 123 秒的 VIDEO FILE 中制作缩略图并将其保存到 THUMBNAIL FILE 中 ffmpeg i VIDEO FILE r 1 ss 123 f image2 THUMBNAIL FILE
  • 我可以在 GridView 中合并页脚吗?

    我有一个与数据集绑定的 GridView 我有我的页脚 它由列线分隔 我想合并 2 列 我怎么做
  • 将预编译模板与 Handlebars.js 结合使用(jQuery Mobile 环境)

    我在 Handlebars 中的模板预编译方面遇到了一些困难 我的 jQuery Mobile 项目在模板方面变得相当大 我希望预编译我使用的模板 然而 我似乎找不到关于如何使用车把执行此操作的良好解释 例如分步教程 我仍然使用脚本标签将模
  • 如何让只有授权用户才能访问存储在 Amazon S3 中的内容?

    一旦您将内容存储在 S3 中并将其公开 那么每个人都可以访问它 有没有办法让只有授权用户才能访问S3中存储的内容 例如 我有一个允许人们存储文档的网站 服务器将这些文档存储在 S3 中 我希望只有上传该文档的用户才能访问它 我知道我可以将
  • 无法对 DependencyProperty 进行数据绑定

    我有一个带有 DependencyProperty 的 UserControl 我使用数据绑定表达式在主机窗口中设置它的值 但是 它并没有按预期工作 用户控件的代码隐藏片段 public class ViewBase UserControl
  • 带有 JSON 数据的 DataTable

    我正在尝试使用 DataTable 创建一个表 但很难让 DataTable 使用 JSON 对象加载 function getData var request new XMLHttpRequest var json link to my
  • MPMoviePlayerController 与启动 UIWebView 来流电影的优缺点

    我有一位客户拥有 Flash 格式的网络视频内容 我的任务是帮助他们在 iPhone 应用程序中展示视频 我意识到第一步是将这些视频转换为适合 iPhone 的 Quicktime 格式 然后我必须帮助客户弄清楚如何或在哪里托管这些文件 如
  • python列表中的索引错误

    B l append l i A B l 这里是一个列表 我试图向其中附加更多值以使其充当数组 但它仍然给我错误 如列表索引超出范围 如何摆脱它 您的代码存在很多问题 1 the append method 不返回任何内容 所以这样写是没有
  • SQL-如何将 YYYYMM 数字转换为日期

    所以我对 SQL 还很陌生 我有一个充满数字的列 以 YYYYMM 格式列出年份和月份 即 2016 年 7 月的 201607 我想知道是否可以在 SQL 中将其转换为正确的日期格式 我已经做了相当多的研究 并且看到了很多关于将 YYYY
  • 如何发送 zip 文件而不在物理位置创建它?

    我想发送带有 zip 文件附件的电子邮件 我可以发送 pdf 文件 而无需使用 ByteArrayOutputStream 将它们保存在物理位置 但是当我尝试压缩这些文件并发送它时它不起作用 它给出了非法附件的异常 下面是我编写的用于创建
  • 从 iOS 中的离屏 OpenGL 像素缓冲区读取像素 (OopenGL-ES)

    我想从屏幕外 不受 CAEAGLLayer 支持 帧缓冲区读取像素 我创建缓冲区的代码如下所示 glGenFramebuffersOES 1 storeFramebuffer glGenRenderbuffersOES 1 storeRen
  • Woocommerce 订单数量的倍数

    我试图将 woocommerce 限制为仅以 5 10 或 15 的固定数量进行销售 下面的代码片段 我在这个论坛上找到的 允许我将最小数量设置为 5 但我想知道是否有人可以建议是否可以将其修改为允许 5 10 或 15 我感谢您提供的任何
  • 如何找到文本光标的全局位置?

    我想执行一个QMenu http qt nokia com doc 4 0 qmenu html文本光标位置处的对象QPlainTextEdit http doc trolltech com main snapshot qplaintext
  • 你最喜欢的 C++ 编码风格习语是什么 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 use_library('django','1.2')

    我正在学习在 Google App Engine 中进行开发 这是教程中的代码之一 http code google com appengine docs python gettingstarted usingwebapp html htt
  • 如何防止在 twitter bootstrap typeahead 插件中按 Enter 键提交

    我有一个输入文本 我应用它的预输入插件来建议项目 但是当我在输入文本上按 Enter 键时 它会提交表单 如何使用 twitter bootstrap typeahead 插件阻止表单提交 您可以通过向特定输入添加 ID 并简单地删除 En
  • git flow 发布选定的功能

    我正在尝试向我的团队介绍 Git 流程 我们是一个相当小的团队 而且非常敏捷 我们希望每天发布一次 这意味着我们测试当天所有更改的时间有限 业务团队希望能够控制正在发布的功能 尽管这并不理想 Git 流程似乎不能很好地适应这一点 从开发中删
  • 在 Android 中调整图片大小同时仍保持质量

    我想将图像文件大小减小到 100 KB 以下 同时保持图像质量 就像 Whatsapp 和 Facebook 所做的那样 我尝试了 stackoverflow 上几乎所有可用的 android 图像压缩代码 但这对我不起作用 现在我正在关注
  • C++14 中的递归 lambda 函数 [重复]

    这个问题在这里已经有答案了 在 C 11 中编写递归 lambda 函数有一个经常重复的 技巧 如下所示 std function
  • java.sql.Date 如何处理负日期?

    我遇到过这样的情况 当从数据库读取日期时 Java 运行时返回某种 反转 毫秒值 在java sql Date 毫秒值与天数大致相同 但从 0 年开始倒推 只需重新启动 Java 运行时即可解决该问题 但是 我发现 Java 几乎可以正确地