抛出奇怪的 org. Threeten.bp.DateTimeException ?

2023-12-10

我的代码运行得很好。今天突然我开始遇到这个异常 -org.threeten.bp.DateTimeException: Field DayOfMonth cannot be printed as the value 1872095944 max width is 2这是我的简单代码:

LocalDateTime date = LocalDateTime.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd - MM - uuuu");
    String sDate = date.format(formatter);//EXCEPTION THROWN HERE

为什么突然出现这个问题?

EDIT

这似乎是一个中间问题。它有时会崩溃,有时却运行良好。没有任何线索表明正在发生什么。 A


这不是一个格式问题(这里只是一个症状),而是一个实例如何的问题LocalDateTime被建造。根本原因很简单LocalDateTime.now()似乎产生了月份中的某一天完全超出范围在一些罕见的情况下。这个问题可能与此有关issue关于 Threeten-bp 的问题跟踪器。

LocalDate.ofEpochDay(x) 有时会返回错误或非法结果 而不是针对较大的 x 值引发异常。为了 实例,LocalDate.ofEpochDay(9223371671611556645L) 返回一个日期 d.getDayOfMonth() 的值为负值,而不是抛出 日期时间异常。

请记住该方法now()必须在后台进行纪元转换,最后调用LocalDate.ofEpochDay(...)。因此,如果您的时钟自 Unix 纪元以来产生了一个不寻常的纪元值(以毫秒为单位),那么这可能会影响now(), 也。你的格式化程序只是从你的LocalDateTime通过有效地调用getDayOfMonth()(实际上是通过现场访问TemporalAccessor)。有问题的源代码:

281     public static LocalDate ofEpochDay(long epochDay) { 
282         long zeroDay = epochDay + DAYS_0000_TO_1970; 
283         // find the march-based year 
284         zeroDay -= 60;  // adjust to 0000-03-01 so leap day is at end of four year cycle 
285         long adjust = 0; 
286         if (zeroDay < 0) { 
287             // adjust negative years to positive for calculation 
288             long adjustCycles = (zeroDay + 1) / DAYS_PER_CYCLE - 1; 
289             adjust = adjustCycles * 400; 
290             zeroDay += -adjustCycles * DAYS_PER_CYCLE; 
291         } 
292         long yearEst = (400 * zeroDay + 591) / DAYS_PER_CYCLE; 
293         long doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400); 
294         if (doyEst < 0) { 
295             // fix estimate 
296             yearEst--; 
297             doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400); 
298         } 
299         yearEst += adjust;  // reset any negative year 
300         int marchDoy0 = (int) doyEst; 
301 

302         // convert march-based values back to january-based 
303         int marchMonth0 = (marchDoy0 * 5 + 2) / 153; 
304         int month = (marchMonth0 + 2) % 12 + 1; 
305         int dom = marchDoy0 - (marchMonth0 * 306 + 5) / 10 + 1; 
306         yearEst += marchMonth0 / 10; 
307 

308         // check year now we are certain it is correct 
309         int year = YEAR.checkValidIntValue(yearEst); 
310         return new LocalDate(year, month, dom); 
311     } 

最有趣和可疑的是仅验证年份,而不验证月份或日期。事实上,看看这个奇怪的结果,其中包含由减号字符(???)分隔的四个部分:

LocalDate d = LocalDate.ofEpochDay(9223371671611556645L);
System.out.println(d); // -999999999-02-0-30
System.out.println(d.getDayOfMonth()); // -30

显然,库代码对于一些异国情调的纪元数字来说是错误的,不幸的是,这些数字可能是由您的时钟产生的。我也在Java-8中测试了相同的代码,得到了相同的错误结果。

Update:

原来的代码为LocalDate.ofEpochDay(long)到目前为止显示的肯定是损坏的,也是因为没有检查数字/算术溢出。例如:像这样的输入Long.MAX_VALUE导致表达式epochDay + DAYS_0000_TO_1970溢出并将符号更改为负数。类似的,输入Long.MIN_VALUE使用表达式时最终会溢出400 * zeroDay。我担心这不是所显示代码的唯一问题。为了比较:格里高利算法的正确实现更像是我自己的时间图书馆.

边注:

在我的图书馆的帮助下Time4J我分析过,上面给定的测试输入也会产生远远超出 Threeten-bp 中定义的一年(范围是 -999999999 到 +999999999):

PlainDate date = PlainDate.of(9223371671611556645L, EpochDays.UNIX);
// java.lang.IllegalArgumentException: Year out of range: 25252733927766555

我不太确定你能做什么来解决这个问题。

第一件事肯定是记录时钟产生的所有输入,将它们与观察到的 Threeten-bp 的错误行为联系起来,并研究为什么你的时钟有时会发疯。

关于 Threeten-bp(和 Java-8!)中的错误,您可以只希望 Threeten-bp 项目团队很快修复它(或者更确切地说 Oracle!)。无论如何,导致问题的输入可能是错误的,因此您最好捕获异常并使用时钟错误的额外消息(作为根本原因)记录它。

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

抛出奇怪的 org. Threeten.bp.DateTimeException ? 的相关文章

  • TabHost 中的 Webview = 以黑屏启动

    我正在尝试在有 4 个选项卡的 tabhost 中使用 webview 所有选项卡都链接到同一个 webview 这很好 除了一个问题 启动时 网络视图是黑色的 单击选项卡 2 3 或 4 使其 活跃起来 我的快速解决方法是使用 setCu
  • 当 Android 上的脸部靠近屏幕时,以编程方式关闭屏幕

    我的应用程序是一个拨号器 当用户将手机靠近头部时 我需要关闭屏幕并防止单击控件 就像本机 Android 拨号器行为一样 我需要什么 API 级别以及如何以正确的方式做到这一点 我通过反汇编一个非常著名的 VoIP 应用程序找到了解决方案
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • 如何在应用程序中创建会话对象

    在我的应用程序中 我想创建一个用于登录和注销的会话 我不知道如何使用会话 任何人都可以通过提供一些示例来帮助我 我认为会话对象应该是在应用程序开始运行时声明和初始化的静态对象 我遇到了这个问题 并决定将我的会话对象放入 utils 类中 该
  • Firebase API 初始化失败,java.lang.reflect.InitationTargetException

    我在我的应用程序中使用 firebase 身份验证 数据库和存储服务 之前运行良好 我已经添加了 firebase 云消息传递设置 如文档中所述 但应用程序在运行时崩溃了 我调查了这个问题大约 4 个小时并尝试了不同的解决方案 就像保持所有
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten
  • 点击按钮时的 Admob 插页式广告

    我有一个应用程序 我正在使用 admob 横幅 现在我想在点击按钮时显示插页式广告 我的应用程序有 2 个活动 我想在第二个活动上显示插页式广告 第二个活动有一个返回第一个活动的按钮 我想在单击按钮后显示广告 我可以在单击按钮时显示广告 但
  • 如何修补更新 Android Studio (0.80 -> 0.81)?

    我安装了 Android Studio Beta v0 8 0 并下载了 v0 8 1 因为 IDE 不会自动下载 v0 80 并使用新版本修补 Android Studio 的预览系列自动做到了这一点 从他们的网页 http tools
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • java charAt() 和startsWith() 哪个更快? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的问题是 如果我想检查特定索引中字符串的一个字符 仅检查一个字符 哪种方法非常有效charAt or startsWith 我的意思是 据我所
  • 从 Java 应用程序读取的文件是否会调用系统调用?

    我的理解是 请求文件系统路径 例如 aFile 的用户应用程序将调用文件系统并获取所请求文件的虚拟地址 然后应用程序将尝试以该地址作为参数 即作为 CPU 指令 进行读 写操作 执行读取命令时 内存管理单元会将该地址转换为物理地址 并查看页
  • 为什么从类构造函数调用的方法应该是最终的? [复制]

    这个问题在这里已经有答案了 我是一名 Java 新手 我试图理解 Oracle 网站教程中的以下行 https docs oracle com javase tutorial java IandI final html https docs
  • Android onclicklistener 在第一次点击时不起作用

    我有一个带有默认文本的 EditText 现在 当用户单击该 EditText 时 默认文本应该更改为某些内容 我所拥有的是 我单击 EditText 光标出现在默认文本之后 没有任何反应 当我再次单击时 onClickListener 就
  • 在进行堆转储后,如何在发生 OutOfMemoryError 时重新启动 JVM?

    我知道关于 XX HeapDumpOnOutOfMemoryError https stackoverflow com q 542979 260805JVM 参数 我也知道 XX OnOutOfMemoryError cmd args cm
  • 可空日期列合并问题

    我在 Geronimo 应用程序服务器上使用 JPA 和下面的 openjpa 实现 我也在使用MySQL数据库 我在更新具有可为空 Date 属性的对象时遇到问题 当我尝试合并 Date 属性设置为 null 的实体时 不会生成 sql
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • Jetpack 中的波浪框组成

    有没有办法用Canvas制作一个顶部有波浪形的盒子 我想知道这个效果是否可以直接用Canvas来实现 不需要有滚动动画 不太清楚你为什么在谈论Canvas 要裁剪这样的视图 您可以使用自定义Shape并将其应用到您的视图中Modifier
  • Bipush 在 JVM 中如何工作?

    我知道 iload 接受整数 1 到 5 但是如何使用 bipush 指令扩展到更高的数字 特定整数如何与字节码一起存储 有几种不同的指令可用于推送整数常量 最小的是iconst 指令 这些只是一个字节 因为该值是在操作码本身中编码的 ic
  • ImageIO.read(...) - 非常慢,有更好的方法吗?

    我正在加载大量将在我的应用程序中使用的图标 我计划在服务器启动时从 jar 中加载所有这些 然而 由于数百张图像加起来刚刚超过 9MB 执行此任务仍然需要 30 秒多的时间 我现在正在一个单独的线程中执行此操作 但这让我想知道我是否在代码中
  • RetentionPolicy CLASS 与 RUNTIME

    两者之间有什么实际区别RetentionPolicy CLASS and RetentionPolicy RUNTIME 看起来两者都被记录到字节码中 并且无论如何都可以在运行时访问 无论如何 两者都可以在运行时访问 那不是那个javado

随机推荐

  • 连接到 informix 数据库 Windows 窗体应用程序

    我正在尝试弄清楚如何连接到 IBM informix 数据库 我一直在做一些研究 发现了 5 年前的一些线索 但这些例子不起作用 我已经安装了 IBM 的 informix 的最新 SDK 我已将 IBM Data Informix dll
  • jupyter笔记本中无法导入Ipython显示中的Geojson

    我想知道为什么 Iphython display Geojson 中的复制粘贴示例不会导入到 Jupyter 笔记本中 from IPython display import GeoJSON GeoJSON data type Featur
  • JTable 不更新数据

    由于某种原因 调用此方法时 此 JTable 没有任何变化 此方法在用户提交 SQL 查询后更新 JTable 吉文斯 dataVector 和 columnNamesVector 已验证是否已正确填充 JTable 是私有类变量 priv
  • 非连续大写单词的正则表达式

    这是给你的一个正则表达式向导 这是在 Notepad 中使用的 即直接输入到搜索和替换对话框中 我需要匹配并突出显示嵌套在字符串中的两个或多个字符的大写字母的孤立单词 但大写单词不能是连续的 它们必须始终被小写单词 或首字母大写的小写名词
  • 在 NUnit 测试期间的拆卸事件中,如何获取应用于刚刚测试的方法的属性?

    我有一个正在运行的测试方法 当该方法生成异常时 我想知道测试的名称是什么以及异常内容 在测试的拆解中 我想访问此信息 我如何从 TearDown 归因方法 您可以在测试拆卸方法中访问文本上下文对象 TearDown public void
  • 在父窗口小部件中访问子窗口小部件的变量(Flutter with Dart)

    我有一个按钮 按下该按钮会打开模式底部表单 该工作表有一个表单小部件 需要几个文本字段和一个图像 来自图库 相机 对于此图像输入 我创建了另一个有状态小部件 该小部件在上一个视图 模式表 中调用 现在 通过用户接收到的图像文件被设置在子有状
  • 如何使用 Spring Cloud 在一个 Spring Boot 应用程序中连接/配置两个 pubsub gcp 项目?

    目前 我们正在 GCP 项目中开发一个 Spring Boot 应用程序 该应用程序连接到同一 GCP 项目中的 PubSub 端点 同时也连接到anotherGCP 项目 我想使用普通的 Spring Cloud GCP PubSub 组
  • 使用JQuery函数减少重复代码

    在这里发现了一个很好的jquery弹出功能 JAVASCRIPT function word1234 live click function event this addClass selected parent append div cl
  • 如何对 ObservableCollection 进行分页?

    我有一个列表框 里面有太多项目 并且 UI 变得越来越慢 虚拟化已打开 等等 因此 我正在考虑仅显示前 20 个项目 并允许用户浏览结果集 即 ObservableCollection 有人知道 ObservableCollection 是
  • VS2012 ASP.Net错误消息无法连接到配置的开发Web服务器

    我上周购买了一台新的 Windows 8 电脑 首先我在上面安装了 VS 2010 但后来它无法正常工作 所以我卸载了 VS 2010 然后安装了 VS 2012 专业版和 SQL Server 2012 现在我可以创建 Windows 应
  • 以本地语言输出的日期函数[重复]

    这个问题在这里已经有答案了 我正在尝试使用意大利语格式输出日期date 如下 然而 它仍然以英文格式发布 我还能做什么 有什么不对 该解决方案必须是特定于脚本的 而不是服务器范围的 date 不支持区域设置 你应该使用strftime 及其
  • 从不同按钮切换模式弹出窗口

    我试图从菜单中的不同按钮打开此弹出窗口 但是 弹出窗口内容将保持不变 Thanks Banick function OpenModalT var modal document getElementById myModalT modal st
  • 如何使用RecyclerView android仅选择一个RadioButton?

    我有一个带有RadioButton的RecyclerView 我只想同时选择一个不多的RadioButton 我的代码使它工作正常 但是当我从上到下重复选择时 选择消失了 我该如何修复它 谢谢 private RadioButton las
  • 异常:AAPT2 错误:检查日志以获取详细信息

    Task processDebugResources Failed to execute aapt com android ide common process ProcessException Failed to execute aapt
  • Blazor WebAssembly 发布失败

    我正在尝试发布一个针对 NET 5 0 的 Blazor WebAssembly 应用程序 我使用默认设置从 Visual Studio 2019 创建了一个新的 Web 部署发布配置文件 该网站已发布到 IIS 但浏览器显示 500 19
  • Angular:点击浏览器后退按钮将用户带回家[重复]

    这个问题在这里已经有答案了 如果用户位于我的角度平台中 当用户单击浏览器的后退按钮时 我想将用户带到主页 还有一个边缘情况需要处理 如果用户通过谷歌搜索 Facebook 或直接输入链接来到我们的平台 那么我们不能执行此行为 但如果他已经在
  • Jenkins 和 NodeJS 插件 - 权限被拒绝错误

    我已经成功地在 Raspberry Pi 上设置了一个 Jenkins 实例 并且在最终遇到这个绊脚石之前已经安装了 NodeJS 插件 Started by an SCM change Building in workspace var
  • Protobuf-net 序列化枚举值超出范围

    C 允许将任何整数值分配给 enum 当我尝试使用值超出范围的枚举字段序列化 通过 protobuf net 对象时 它会抛出异常 没有线值映射到枚举 PersonLevel 我的枚举 PersonLevel 没有 Flags 属性 Pro
  • glBufferData分配的内存什么时候释放?

    假设我为统一缓冲区分配内存 如下所示 GLuint length 0x1000 GLuint myBuffer glGenBuffers 1 myBuffer glBindBuffer GL UNIFORM BUFFER myBuffer
  • 抛出奇怪的 org. Threeten.bp.DateTimeException ?

    我的代码运行得很好 今天突然我开始遇到这个异常 org threeten bp DateTimeException Field DayOfMonth cannot be printed as the value 1872095944 max