使用 JSR 310 (DateTime API) 的军事时区

2023-12-21

我在应用程序中使用 JSR 310 DateTime API*,并且需要解析和格式化军事日期时间(称为 DTG 或“日期时间组”)。

我正在解析的格式看起来像这样(使用DateTimeFormatter):

"ddHHmm'Z' MMM yy" // (ie. "312359Z DEC 14", for new years eve 2014)

如上所述,这种格式相当容易解析。当日期包含与“Z”(祖鲁时区,与 UTC/GMT 相同)不同的时区时,就会出现问题,例如“A”(Alpha,UTC+1:00)或“B”(Bravo,UTC+ 2:00)。看军事时区 http://www.timeanddate.com/time/zones/military获取完整列表。

我如何解析这些时区?或者换句话说,除了文字“Z”之外,我还可以在上面的格式中放入什么,以使其正确解析所有区域?我尝试过使用"ddHHmmX MMM yy", "ddHHmmZ MMM yy" and "ddHHmmVV MMM yy",但它们都不起作用(全部都会抛出DateTimeParseException: Text '312359A DEC 14' could not be parsed at index 6对于上面的例子,解析时)。使用单个V格式不允许(IllegalArgumentException当尝试实例化时DateTimeFormatter).

编辑:似乎这个符号z如果不是因为下面的问题,可能会起作用。

我还应该提到我已经创建了一个ZoneRulesProvider包含所有指定区域和正确的偏移量。我已经使用 SPI 机制验证了这些已正确注册,并且我的provideZoneIds()方法按预期被调用。还是不会解析。作为一个附带问题(编辑:现在这似乎是主要问题),API 不允许使用除“Z”之外的单字符时区 ID(或“区域”)。

例如:

ZoneId alpha = ZoneId.of("A"); // boom

会扔DateTimeException: Invalid zone: A(甚至无需访问我的规则提供程序来查看它是否存在)。

这是 API 中的疏忽吗?或者我做错了什么?


*)实际上,我正在使用 Java 7 并且三十向后移植 http://www.threeten.org/threetenbp/,但我认为这对于这个问题并不重要。

PS:我当前的解决方法是使用 25 个不同的DateTimeFormatters 带有文字区域 id(即"ddHHmm'A' MMM yy", "ddHHmm'B' MMM yy"等),使用RegExp用于提取区域 ID,并根据区域委托给正确的格式化程序。提供者中的区域 ID 被命名为“Alpha”、“Bravo”等,以允许ZoneId.of(...)找到区域。有用。但它不是很优雅,我希望有更好的解决方案。


In java.time, the ZoneId限制为 2 个字符或更多。具有讽刺意味的是,这是为了保留空间,以便在未来的 JDK 版本中添加军事 ID(如果事实证明需求量很大)。因此,遗憾的是您的提供程序将无法工作,并且无法创建ZoneId您想要使用这些名称的实例。

一旦您考虑使用,解析问题就可以解决ZoneOffset代替ZoneId(鉴于军事区是固定偏移量,这是看待问题的好方法)。

关键是方法DateTimeFormatterBuilder.appendText(TemporalField, Map)它允许使用您选择的文本将数字字段格式化并解析为文本。和ZoneOffset是一个数字字段(该值是偏移量中的总秒数)。

在这个例子中,我已经设置了映射Z, A and B,但您需要将它们全部添加。否则,代码非常简单,设置一个可以打印和解析军事时间的格式化程序(使用OffsetDateTime用于日期和时间)。

Map<Long, String> map = ImmutableMap.of(0L, "Z", 3600L, "A", 7200L, "B");
DateTimeFormatter f = new DateTimeFormatterBuilder()
    .appendPattern("HH:mm")
    .appendText(ChronoField.OFFSET_SECONDS, map)
    .toFormatter();
System.out.println(OffsetTime.now().format(f));
System.out.println(OffsetTime.parse("11:30A", f));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JSR 310 (DateTime API) 的军事时区 的相关文章

  • 如何将 Hamcrest 匹配器应用于被测类的属性?

    有没有办法构建一个组合的 Hamcrest 匹配器来测试对象和该对象的属性 伪代码 both instanceof MultipleFailureException class and pseudo code starts adapt ne
  • 为什么这不会绘制图像?

    我想做的是 当我运行应用程序时 它会启动线程并且图像显示 3 秒 3000 毫秒 然后线程停止运行 图片路径正确 图片文件存在 线程本身运行 但是 图像似乎没有显示 可能出什么问题了 这是我的代码 package org main impo
  • Spring - 两种不同的 POST 方法,具有相同的 URL,但生成的内容类型不同

    我有以下控制器 RequiredArgsConstructor RestController public class OwnerViewController implements ApiOwnerViewController privat
  • 如何在 Java 中用 \n 替换 \\n

    我有一个string test first n middle n last 现在我想更换所有 n by n 我试过了test replaceAll n n and test replaceAll n n 但它们不起作用 有人有解决办法吗 T
  • 正则表达式或用单个空格替换多个空格的方法

    你能告诉我有没有办法在java或spring中用单个空格替换多个空格 有相同的 stringUtils 函数吗 like 1 test test test test 2 test test test test 3 test test tes
  • Android 3.1 USB 主机 - BroadcastReceiver 未收到 USB_DEVICE_ATTACHED

    我经历过USB 主机的描述和示例位于developer android com http developer android com guide topics usb host html检测连接和分离的 USB 设备 如果我在清单文件中使用
  • 如何调试内部错误?

    所以我有课Foo最终应该调整并重新加载类 它也有一个方法 private void redefineClass String classname byte bytecode ClassFileLocator cfl ClassFileLoc
  • javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“tname”

    我之前使用的是 scriptlet 但现在我改用了 mvc 我无法检索 JSP 页面上的值并收到错误 javax el PropertyNotFoundException Property tname not found on type j
  • Spring的@PreDestroy导致随机记录而不记录

    我正在使用 Spring 并且在终止时我让 PreDestroy 清理 bean 我不明白为什么日志记录有时会成功 而有时会失败 Using Log4j2 Logger log LogManager getLogger MyClass cl
  • kafka消费端Offsets的一致性

    我有复制因子为 3 的卡夫卡主题min insync replicas 2 一个向该主题发送 X 条消息的生产者acks all 一段时间后 1 分钟内 在所有消息发送到主题后 将使用 java kafka 客户端为此主题创建新的消费者 使
  • Java ZIP - 如何解压缩文件夹?

    是否有任何示例代码 如何将 ZIP 中的文件夹部分解压到我想要的目录中 我已将文件夹 FOLDER 中的所有文件读取到字节数组中 如何从其文件结构创建 我不确定你所说的部分是什么意思 您的意思是在没有 API 帮助的情况下自己完成吗 如果您
  • hibernate session 的 get() 和 load() 方法在获取方面有什么区别?

    get 和 load 方法有什么区别 关于数据获取方法 public static void main String args SessionFactory factory new Configuration configure build
  • 测试 Hessian remoting-servlet.xml

    我们使用 Hessian 来实现富客户端和服务器之间的通信 由于移动和重命名 remoting servlet xml 中的条目有时会与实际的类名不匹配 因此 我正在寻找一种简单的方法来测试远程处理 xml 有没有简单的方法可以做到这一点
  • 如何在打开导航抽屉时使背景 Activity 变小?

    我想做我的背景Activity打开时稍微小一点Navigation Drawer 模拟存在的效果Airbnb应用 我想最好的解释是截图 但重点不是让 View 变小 而是让它成为与 Drawer 打开 关闭动画同步的动画 因此 如果您开始打
  • 如何在 Google 地图中创建自定义地图?

    我正在尝试创建一个包含我家地图的 Google 地图应用程序 卧室 浴室 厨房等 使用 GPS 我会找到我现在在家里的位置 并尝试获取到我卧室的方向 步行距离 您可以使用Google的API来获取方向 我需要知道的是 如何添加我家的自定义地
  • 重构 google 的 NetworkBoundResource 类以使用 RxJava 而不是 LiveData

    谷歌的android架构组件教程here https developer android com topic libraries architecture guide html有一部分解释了如何抽象通过网络获取数据的逻辑 在其中 他们使用
  • Java并发锁和条件的使用

    我可以用object wait object notify and synchronized blocks解决生产者消费者类型的问题 同时我可以使用locks and conditions from java util concurrent
  • 如何在非Spring的构造型类中使用@Autowired

    我想在此类中使用该存储库 但是当我放置像 Component 这样的构造型时 我从 IDE 收到错误 无法自动装配 未找到 身份验证 类型的 bean public class CustomMethodSecurityExpressionR
  • 如何在服务器上获取球衣日志?

    我正在使用球衣进行 REST WS 如何在服务器端启用球衣日志 很长的故事 我收到客户端异常 但我在 tomcat 日志中没有看到任何内容 它甚至没有到达我的方法 由于堆栈跟踪显示 toReturnValue 它确实从服务器获取了一些内容
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun

随机推荐

  • Android Java - Joda Date 速度慢

    在 Android 上使用 Joda 1 6 2 以下代码挂起大约 15 秒 DateTime dt new DateTime 最初发布此帖子Android Java Joda Date 在 Eclipse 模拟器中运行缓慢 https s
  • 长按后启用 ScrollView 中元素的拖动

    我已经用 panResponder 和 ScrollView 实现了拖放列表 我希望即使在触摸该项目时也能够滚动列表 问题是当我做滚动手势时该项目会移动 当然 我也希望能够移动该项目 但现在它具有与滚动相同的手势 我想通过仅在长按 1 5秒
  • 如何循环非默认构造类的 boost MPL 列表?

    我有以下示例 include
  • Sqlite从多个表中选择*

    我真的需要一些有关 sqlite 的帮助 我有一个数据库 有两个表 我们称它们为 table1 和 table2 这两个表基本相同 列名相同 列数相同 第一列是文本 其余列是双列 这适用于两个表 我不想将它们合并到一张表中 如果出现通常应该
  • 限制 Prolog 中的搜索 - Magic Square

    我想用 Prolog 程序求解最完美幻方 维基页面 https en wikipedia org wiki Most perfect magic square https en wikipedia org wiki Most perfect
  • 将文本垂直对齐到框的底部?

    我制作了盒子并设置了行高 文本自动垂直居中 有没有一种方法或任何技巧可以将文本设置在框的底部 div width 100px height 100px background eee color 333 text align center l
  • 在 CQRS 的写入端从数据库读取数据

    背景 Diagrams explaining CQRS usually will have clear separation of read and write paths and one way data flow like in thi
  • 如何使用 style.xml 文件中的样式(以及所有其他样式)创建无边框按钮

    我正在尝试创建一个无边框按钮 但我的按钮还有许多其他样式 并且我想通过将代码嵌入到 style xml 文件中来设计无边框按钮 我发现的一种方法是 通过在我的布局文件中使用 style android attr borderlessButt
  • “此安装不支持该项目类型”错误

    我在 W2k3 操作系统上安装了 VS 2008 SP1 在我安装 ASP NET MVC beta 并尝试创建 ASP NET MVC 类型项目后 出现以下错误 此安装不支持该项目类型 如果您已解决此问题 请告诉我 我尝试了这里发布的一些
  • 将 DataGrid 视图转换为 DataSet/DataTable 的最佳方法

    DataSet DataTable and LINQ表达式是常见的DataSource的值DataGridView 现在反过来 是否可以传递 绑定DataGridView记录到DataSet or DataTable Thanks 你可以这
  • 将 RDS 数据导出到 S3/Glacier

    我想将数据从 Oracle RDS 导出到 S3 然后将其移动到 Glacier 我的最终目标是将 RDS 中存储的数据备份到 S3 和 Glacier 以满足合规性要求 任何人都可以建议实现它的最佳方法 RDS 快照存储在 s3 中 但您
  • 生成订单号的好算法

    尽管我喜欢使用 GUID 作为系统中的唯一标识符 但对于订单号等字段来说 它并不是很用户友好 客户可能必须向客户服务代表重复该字段 有什么好的算法可以用来生成订单号 以便它是 Unique 非连续 纯粹用于光学 仅数字值 因此可以通过电话轻
  • 使用 file_get_contents 来验证和访问受 htaccess 保护的文件[重复]

    这个问题在这里已经有答案了 我需要访问受常规 htaccess 文件 身份验证类型 Basic htpasswords 等 保护的外部 php 页面 我想通过请求发送所需的用户名和密码 是否可以 我想避免cURL和所有pecl http如果
  • 添加项目依赖后出错

    我使用 Gradle 构建多个项目 布局如下 ares build gradle ares settings gradle ares ares gui build gradle ares ares persistence build gra
  • 如何在 VS 2015 中启用 C# 脚本?

    如何配置 VS 2015 以启用 Roslyn 的 C 脚本功能 我尝试安装各种 Nuget 包 包括 Microsoft CodeAnalysis CSharp Microsoft CodeAnalysis Scripting CShar
  • 在 C++ 中嵌入 python 函数

    我正在尝试使用 Cython 从 python 生成 c 代码 但名称修饰似乎存在一些问题 我首先生成将代码从 python 转换为 c 代码 然后使用 gcc 将代码编译为 so 我想使用 cython 而不是 C python API
  • Android:如何以编程方式创建 StateListDrawable

    我有一个 GridView 来显示一些对象 并且在视觉上每个对象都有一个图像图标和一个文本标签 我还希望图像图标在单击时具有一些 推和弹出 效果 也就是说 当按下时 图像将向右下方向移动一小段距离 当释放时返回到其原始位置 这些对象 及其图
  • 按后退按钮的片段

    我现在正在进行一个包含片段的活动 1 2 3 4 如果按按钮 3 可以重定向到 4 我想实现后退按钮 如下所示 当在 4 处按回时 返回到 3 当在 3 处按回时 返回到 2 当按下 1 时 活动完成 目前的实现是完成activity而不是
  • Lambda 表达式:n3290 草案

    n3290 ISO 草案中的一点 Lambda 表达式 第 5 1 2 节 第 6 段 The closure type for a lambda expression with no lambda capture has a public
  • 使用 JSR 310 (DateTime API) 的军事时区

    我在应用程序中使用 JSR 310 DateTime API 并且需要解析和格式化军事日期时间 称为 DTG 或 日期时间组 我正在解析的格式看起来像这样 使用DateTimeFormatter ddHHmm Z MMM yy ie 312