Java:解析 ISO_DATE / ISO_OFFSET_DATE

2023-12-23

对于 REST Web 服务,我需要返回带时区的日期(无时间).

显然不存在这样的东西ZonedDate在 Java 中(仅LocalDate and ZonedDateTime),所以我用的是ZonedDateTime作为后备。

将这些日期转换为 JSON 时,我使用DateTimeFormatter.ISO_OFFSET_DATE格式化日期,效果非常好:

DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE;
ZonedDateTime dateTime = ZonedDateTime.now();
String formatted = dateTime.format(formatter);

2018-04-19+02:00

然而,尝试解析这样的日期......

ZonedDateTime parsed = ZonedDateTime.parse(formatted, formatter);

...导致异常:

java.time.format.DateTimeParseException:无法解析文本“2018-04-19+02:00”:无法从 TemporalAccessor 获取 ZonedDateTime:{OffsetSeconds=7200},ISO 解析为 java 类型的 2018-04-19。时间.格式.解析

我也尝试过ISO_DATE并遇到了同样的问题。

我如何解析这样的分区日期?
或者是否有任何其他类型(在 Java Time API 内)我应该用于分区日期?


问题是ZonedDateTime需要构建所有日期和时间字段(年、月、日、小时、分钟、秒、纳秒),但是格式化程序ISO_OFFSET_DATE生成一个不带时间部分的字符串。

当解析它时,没有与时间相关的字段(小时,分钟,秒),你会得到一个DateTimeParseException.

解析它的一种替代方法是使用DateTimeFormatterBuilder并定义时间字段的默认值。正如你所使用的atStartOfDay在你的回答中,我假设你想要午夜,所以你可以执行以下操作:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    // date and offset
    .append(DateTimeFormatter.ISO_OFFSET_DATE)
    // default values for hour and minute
    .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
    .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
    .toFormatter();
ZonedDateTime parsed = ZonedDateTime.parse("2018-04-19+02:00", fmt); // 2018-04-19T00:00+02:00

您的解决方案 https://stackoverflow.com/a/49922704也工作得很好,但唯一的问题是你正在解析输入twice(每次调用formatter.parse将再次解析输入)。更好的选择是使用parse没有时间查询的方法(仅解析一次),然后使用解析的对象来获取您需要的信息。

DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE;
// parse input
TemporalAccessor parsed = formatter.parse("2018-04-19+02:00");

// get data from the parsed object
LocalDate date = LocalDate.from(parsed);
ZoneId zone = ZoneId.from(parsed);
ZonedDateTime restored = date.atStartOfDay(zone); // 2018-04-19T00:00+02:00

使用此解决方案,输入仅被解析一次。

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

Java:解析 ISO_DATE / ISO_OFFSET_DATE 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Java套接字:在连接被拒绝异常时重试的最佳方法?

    现在我正在这样做 while true try SocketAddress sockaddr new InetSocketAddress ivDestIP ivDestPort downloadSock new Socket downloa
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • 如果使用的 JVM 是 x86 或 x64,则以不同的方式解决 Maven 依赖关系?

    我设置了一个 Maven 存储库来托管一些 dll 但我需要我的 Maven 项目根据使用的 JVM 是 x86 还是 x64 下载不同的 dll 例如 在运行 x86 版本 JVM 的计算机上 我需要从存储库下载 ABC dll 作为依赖
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 如何更改 okhttp 中请求的超时时间

    一般来说 我们为 okHttp 客户端设置超时 并使用该客户端的单个实例 因此 一旦生成该客户端 我们就无法更改该客户端的超时 如何更改特定请求的超时 到底有没有 不创建新客户端就可以做到这一点 很常见的是 某些调用花费的时间至少是每个应用
  • 具有可选子元素的默认 XML 序列(或全部)是否必须至少有一个子元素?

    如果有人能够确认以下模式的解释是否正确 我将不胜感激
  • Java 10 Eclipse + Maven“java.lang.module.FindException:找不到模块 myproject”

    我在 Eclipse 4 7 3a 中创建了一个新的 Java 10 项目 这是一个带有一些依赖项的 Maven 项目 该项目名为 MyProject 下面是我的 module info java module myproject expo
  • AndroidX 与 Android 数据绑定不兼容

    好的 我的任务是将项目迁移到 AndroidX 以减少项目中支持库的混乱 我已经按照官方文档启用了 AndroidX 但现在在尝试通过相应的自动生成的 Binding 类 通过在模块 gradle 中启用数据绑定创建 来膨胀视图时遇到运行时
  • Android Studio 0.8 - 不再运行自定义任务

    我刚刚从 Android Studio 0 6 升级到 0 8 3 在 Linux Mint 15 上 现在我的构建无法按预期运行 在我的 gradle 文件中 我有很多自定义任务 它们执行预构建步骤 复制文件 调整图像大小等 lots o
  • Chrome 扩展程序测试

    有人有 Chrome 扩展测试的经验吗 例如 我想创建一个使用的扩展 弹出浏览器操作 并自动执行一个测试用例来检查 单击时弹出窗口的行为 铬问题 http code google com p chromium issues detail i
  • Elixir 中的快速不区分大小写排序

    Elixir 程序员们大家好 我有大约 2 500 首音乐曲目的列表 我想按不同的参数 例如曲目标题 对它们进行排序 排序应不区分大小写 下面的代码可以工作 但需要大约 100 毫秒到 130 毫秒来对列表进行排序 有更快的方法吗 对我来说
  • 以编程方式添加 ARSCNView

    如何以编程方式添加 ARSCNView 如何设置宽度 高度和约束 class ViewController UIViewController var sceneView ARSCNView let configuration ARWorld
  • 由于环境错误而无法安装软件包:[WinError 5] 访问被拒绝:

    我有 Windows 10 我已完成 Tensorflow 安装 有用 它说 你好 Tensorflow 但这一切都在它面前 2018 08 18 18 16 01 500579 I T src github tensorflow tens
  • Django:向 UpdateView 生成的表单字段添加额外属性

    我使用的自定义用户是 Django AbstractUser 的子类 我试图存档的是允许用户更新他们的数据 一切正常 但表单看起来很难看 下面是我的代码 类属性未添加到表单中 forms py 简化 class AccountEditFor
  • Decorator() 得到了意外的关键字参数

    我在 Django 视图上遇到此错误 TypeError at web host 1 decorator got an unexpected keyword argument host id Request Method GET Reque
  • Fabric.js 动画对象/图像

    大家好 这是我一直在使用的代码 它将一个物体从 A 移动到 B 我想做的是让它移动到多个点 所以从起始位置 A gt B 然后从 B gt C 等等 也许有一些包含坐标集的变量 这些坐标将作为参数输入到某些动画函数中 但我尝试的任何操作都只
  • 通过映射减少图像尺寸

    我有一个 png 图像 其中有四种颜色 如果我将图像转换为 numpy 数组 我会得到一个具有以下尺寸的数组 length X height X 3 with length height 如何通过映射颜色来减少维度 这是当前的结构 arra
  • MapView:找不到方法 B 引用的类 A

    屏幕上有3个按钮 开始 查看地图 停止 当我单击 查看地图 时 它应该转到显示地图的新屏幕 但出了点问题 应用程序被强制关闭 我不断收到无法找到方法 B 引用的类 A 错误 拜托请有人纠正它 我已经被这个问题困扰三天了 Main xml
  • typedef std 容器?

    我想做 typedef deque type error use of class template requires template argument list type
  • 编写 Z80 汇编程序 - 词法 ASM 并使用组合构建解析树?

    我对编写汇编器的概念非常陌生 即使在阅读了大量材料之后 我仍然很难理解几个概念 将源文件实际分解为令牌的过程是什么 我相信这个过程称为词法分析 我已经到处搜索有意义的真实代码示例 但我找不到如此简单的代码示例 非常受欢迎 解析时 信息是否需
  • MATLAB 中的复制求和运算符

    我正在尝试在 MATLAB 中对以下时间相关函数进行建模 其中 gamma beta 和 delta 是常数 我不确定进行求和的最佳方法是什么 我可以制作 u t 和 y t 函数句柄 但 symsum 只能用于符号 我唯一的选择是使用 f
  • 浮点差异取决于调试构建的运行方式

    我正在使用调试版本并在同一台计算机上获得不同的结果 无论我是否在调试器下运行 我正在使用优秀的 TestDriven Net 来运行单元测试 使用 TestDriven Net 或外部 NUnit 运行程序 运行 会产生相同的结果 使用 T
  • .NET 日志框架 [关闭]

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

    对于 REST Web 服务 我需要返回带时区的日期 无时间 显然不存在这样的东西ZonedDate在 Java 中 仅LocalDate and ZonedDateTime 所以我用的是ZonedDateTime作为后备 将这些日期转换为