将 ISO 8601 日期转换为标准字符串格式

2024-01-09

我正在尝试转换一个有效的ISO 8601 http://en.wikipedia.org/wiki/ISO_8601字符串转换为一致的格式,以便可以使用简单的字典顺序进行排序和搜索。

我的应用程序可以接收以下任意格式的日期/时间,例如:

2015-02-05T02:05:17.000+00:00
2015-02-05T02:05:17+00:00
2015-02-05T02:05:17Z

这些都代表相同的日期/时间,我想将它们全部转换为规范的形式进行存储,例如:

2015-02-05T02:05:17.000Z

我的第一个想法是使用以下技术来解析它们将符合 ISO 8601 的字符串转换为 java.util.Date https://stackoverflow.com/questions/2201925/converting-iso-8601-compliant-string-to-java-util-date,然后转换回所需的字符串,但是在处理不太精确的日期/时间时,这会失败,例如:

2015-02-05T02:05:17Z
2015-02-05T02:05Z
2015-02-05Z
2015-02Z
2015Z

这些时间的不精确性应该被保留。它们不应转换为:

2015-02-05T00:00:00.000Z

我看过 Java 8 和 Joda-Time,但他们似乎想将所有内容视为特定的时间点,并且无法对不精确的性质或部分日期/时间进行建模。

UPDATE:

使用 Java 8,我可以这样做:

OffsetDateTime dateTime = OffsetDateTime.parse("2015-02-05T02:05:17+00:00");
System.out.println(dateTime.toString());

这给了我:

2015-02-05T02:05:17Z

这就是我想要的,但是:

OffsetDateTime dateTime = OffsetDateTime.parse("2015-02-05T02:05:17.000+00:00");
System.out.println(dateTime.toString());

还给了我:

2015-02-05T02:05:17Z

请注意,java 已经放弃了毫秒精度。指定 000 与不指定任何内容的处理方式相同,这似乎不太正确。


在 Java 8 中,您可以使用LocalDate.parse() http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#parse-java.lang.CharSequence- or LocalDateTime.parse() http://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html#parse-java.lang.CharSequence- on a String如果字符串位于,则无需为其提供模式ISO 8601 format.

parse(), 从文本字符串(例如 2007-12-03)获取 LocalDate 的实例。 该字符串必须表示有效日期并使用以下命令进行解析 DateTimeFormatter.ISO_LOCAL_DATE。

and,

DateTimeFormatter.ISO_LOCAL_DATE, 这将返回一个能够格式化和解析的不可变格式化程序 ISO 8601

例如,

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
System.out.println("Date: " + aLD);

String strDatewithTime = "2015-08-04T10:11:30";
LocalDateTime aLDT = LocalDateTime.parse(strDatewithTime);
System.out.println("Date with Time: " + aLDT);

gives,

Date: 2015-08-04
Date with Time: 2015-08-04T10:11:30

Update:

你的约会对象,即"2015-02-05T02:05:17.000+00:00"只会在以下情况下扔掉零 它们都是零,如果纳秒的值不是零,那么它会显示得很好,但是,如果您也想显示零,那么您可以简单地添加if/else阻止并在您的日期后附加零if你的纳秒为零(yourdate.getNano()==0), else按原样打印,

String dateTimestr = "2015-02-05T02:05:17.000+00:00";

OffsetDateTime dateTime = OffsetDateTime.parse(dateTimestr);

if ((dateTime.getNano() == 0) && (dateTimestr.length() > 25 ))
    System.out.println(dateTime.toLocalDateTime() + ".000Z");

else
    System.out.println(dateTime.toString());

会给,

2015-02-05T02:05:17.000Z

将您的日期更改为

String dateTimestr = "2015-02-05T02:05:17+00:00";

gives,

2015-02-05T02:05:17Z

将日期更改为,

String dateTimestr = "2015-02-05T02:05:17.100+00:00";

gives,

2015-02-05T02:05:17.100Z

将其更改为

String dateTimestr = "2015-02-05T02:05:17Z";

gives,

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

将 ISO 8601 日期转换为标准字符串格式 的相关文章

  • 为什么 Hashtable 不允许空键或空值?

    正如 JDK 文档中所指定的 Hashtable 不允许空键或空值 HashMap 允许一个空键和任意数量的空值 为什么是这样 Hashtable 是较旧的类 通常不鼓励使用它 也许他们看到了对 null 键的需要 更重要的是 null 值
  • 将 WAR 部署到 Tomcat(Spring Boot + Angular)

    我正在尝试使用以下命令部署 Spring Boot 应用程序WAR包装至Tomcat 10 应用程序已成功部署 但是 当我尝试访问端点时 它会导致404 未找到 战争文件 应用程序 war http localhost 8080 appli
  • 使用itext java库复制时pdf文件大小大大增加

    我正在尝试使用 Java 中的 itextpdf 库将现有的 pdf 文件复制到一些新文件中 我使用的是 itextpdf 5 5 10 版本 我在两种方式上都面临着不同的问题 PDFStamper 和 PdfCopy 当我使用 PDFSt
  • 来自行号的方法名称

    给定特定类源代码 Java C 的行号 是否有一种简单的方法来获取它所属的方法的名称 如果它落入其中 大概使用抽象语法树 这对于将 checkstyle 的输出限制为仅触及的方法很有用 我假设您必须使用抽象语法树来执行 Line gt Me
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • Spring Data Jpa OneToMany 同时保存子实体和父实体?

    这是我的父实体 注意 为了简洁起见 删除了 getter setter lombok 注释 Entity public class Board Id GeneratedValue strategy GenerationType IDENTI
  • 无法在 Intellij 中运行主类[重复]

    这个问题在这里已经有答案了 我有以下项目结构 ProjectRoot src Main examples libs My src文件夹被标记为sources在 Intellij 中 现在 当我想运行 Main 类时 出现以下错误 Excep
  • 递归取消 allOf CompletableFuture

    如果我有 CompletableFuture
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • 向Java类库添加函数

    我使用的 Java 类库在很多方面都不完整 有很多类我认为应该内置其他成员函数 但是 我不确定添加这些成员函数的最佳实践 让我们调用不足的基类A class A public A long arbitrary arguments publi
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • 如何更改 JAX-WS Web 服务的地址位置

    我们目前已经公开了具有以下 URL 的 JAX RPC Web 服务 http xx xx xx xx myservice MYGatewaySoapHttpPort wsdl http xx xx xx xx myservice MYGa
  • 为什么/何时应该使用泛型方法?

    学习Java的时候遇到过通用方法 public
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 防止休眠 StaleObjectStateException 发生

    我对 Spring 控制器方法有疑问 它实际上对同一实体进行了两次更新 这导致陈旧对象状态异常 问题是 当我检索 Member 实例时 我认为它会以某种方式导致更新 请参阅 UPDATE ONE 的广告实例 这实际上是不需要的 以及当我更新
  • 替换 SQL 中字符串中第一次出现的子字符串

    我必须从 temp 表中获取数据 其中包含 或 ccc 或 bbb 或 aaa 之类的内容 我想将第一次出现的内容替换为空间以获得类似 ccc 或 bbb 或 aaa 之类的内容 我正在尝试一些东西并替换 但它们似乎没有给我带来想要的结果
  • Django 中“max_length”的最大大小是多少?

    这是我的模型 class Position models Model map models ForeignKey Map primary key True members models CharField max length 200 La
  • urllib2 和 json

    谁能指出一个教程 向我展示如何使用 urllib2 执行 POST 请求 数据为 JSON 格式 仅当服务器不费心检查内容类型标头时 梅萨的答案才有效 如果您希望它真正起作用 您需要指定一个内容类型标头 这是经过修改以包含内容类型标头的 M
  • Google Tasks API BatchRequest 触发“批量请求中的重复请求 ID”

    从 9 月 13 日开始 Google Tasks BatchRequest 更新工作流程将在多年来保持稳定的应用程序中触发 400 错误返回 批量请求中的重复请求 ID 我在请求中找不到任何指示重复请求 ID 的内容 有人知道怎么回事吗
  • 更改表格的 CCK 标题

    默认情况下 CCK 表单创建具有表单标题 Create Your Content Type Name Here 我想把我的改成 Register for Such and Such 有人建议我可以使用字符串覆盖 但我找不到要替换的字符串 我
  • 带有响应图像的 2 列 CSS 响应式布局

    我已经浏览了尽可能多的关于这个主题的帖子 但没有一个能解决这个难题 是否可以让左列包含文本 右列包含图像 调整大小时 图像会流入单个列 并带有自动调整大小的图像 在 img 上使用 100 的最大宽度将使图像响应并自动调整大小 但是 自动调
  • 如何使无窗口/命令行应用程序返回但继续在后台执行?

    我正在 Net 中编写一个命令行应用程序 该应用程序本身相当简单 但它必须同步连接到 Web 服务 而 Web 服务又必须连接到 Oracle 数据库 并且those作品喜欢慢慢来 是否有一种简单的方法 无需将我的应用程序 exe 一分为二
  • PHP、mysql编码UTF-8

    我正在进行基本的 PHP 和 MySQL 搜索 我国通常使用的字符编码是 utf 8 或 euc kr 当我输入英文关键字时 结果显示良好 但是 输入韩语关键字 结果不会显示在屏幕上 未显示结果计数 我正在 Eclipse PDT 上编码
  • Python 中无法连接字符串和整数的原因[重复]

    这个问题在这里已经有答案了 大量文献记载了这一点str需要先将整数转换为字符串 然后才能连接它们 I am str n years old Python不允许一定有根本原因 I am n years old 我想知道原因是什么 在我的项目中
  • 函数到函数指针的“衰减”

    我们知道一个参数看起来像void 将被重写为void 这类似于数组到指针的衰减 其中int 变成int 在很多情况下 使用数组会将其衰减为指针 除了参数之外 是否存在函数 衰减 的情况 C 标准规定 8 3 5 5 确定各个参数的类型后 任
  • 将 x 轴标签放置在句点刻度之间

    我想将 x 轴标签放置在刻度之间 For example by default R produces a graph that looks like this Note I added axis 1 c 2001 2002 2003 200
  • 带倒计时器的 QMessageBox

    我想知道向倒计时器添加倒计时器的最佳方法是什么QMessageBox 例如 当显示消息框时 倒计时器会启动 例如 5 秒 如果用户没有响应消息框 消息框将选择默认选项 像这样的事情怎么样 include
  • C++ - 从 std::string 类派生类以添加额外的功能?

    首先 我知道std string类具有我可能需要的所有功能 这只是为了测试目的 看看我将来能做什么 反正 说我有这个 class MyString public std string 例如 我将如何使用 MyString varName w
  • 用 C++ 编写 MIDI 文件

    您好 我在寻找有关此问题的正确信息时遇到一些问题 如果有人能指出正确的方向 我会很高兴 如何编码 midi 文件 例如我怎样才能编写一个播放随机音调 1 秒的片段 基本上我需要完成的是将不同的 midi 旋律表示为某种向量 我怎样才能做到这
  • 这种向量删除方法有什么问题吗?

    我有一个有效的删除方法 如下 void deleteUserByID int id std vector
  • 更新后 Gradle 错误:com.android.tools:sdk-common

    我将 Android Studio 更新到最新版本 3 1 Canary 8 并强制将 com android tools build gradle 更新到版本 3 1 0 alpha08 但同步项目时出现此错误 Could not fin
  • 无法 insmod 或使用内核间模块

    我在内核驱动程序 1 KD1 ko 中有一个函数 static void test void EXPORT SYMBOL test static void test printk lt lt lt MISSION DONE gt gt gt
  • 使用 Android 导航组件获取 Backstack 状态

    我想实现后压行为 以便当您在后退堆栈为空时按后退时提示确认弹出窗口 否则它会弹出堆栈中的下一个片段 我试图获取后退堆栈计数 但我总是从两个片段管理器中得到 0 getSupportFragmentManager getBackStackEn
  • 将 ISO 8601 日期转换为标准字符串格式

    我正在尝试转换一个有效的ISO 8601 http en wikipedia org wiki ISO 8601字符串转换为一致的格式 以便可以使用简单的字典顺序进行排序和搜索 我的应用程序可以接收以下任意格式的日期 时间 例如 2015