将 SimpleDateFormat 转换为 DateTimeFormatter

2024-02-04

因此,当尝试使用 SimpleDateFormat 和 Date 替换一些遗留代码以使用 java.time.DateTimeFormatter 和 LocalDate 时,我遇到了问题。这两种日期格式不等效。在这一点上,我必须说我知道这两种日期类型不一样,但我所处的场景意味着我从不关心时间方面,所以可以忽略它。

public Date getDate(String value) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    try {
        return dateFormat.parse(value);
    } catch (ParseException e) {
        return null;
    }
}

public LocalDate getLocalDate(String value) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    try {
        return LocalDate.parse(value, formatter);
    } catch (DateTimeParseException e) {
        return null;
    }
}

public void testDates() {
    getDate("03/07/2016");               // Sun Jul 03 00:00:00 BST 2016
    getDate("3/7/2016");                 // Sun Jul 03 00:00:00 BST 2016
    getDate("3/7/2016 00:00:00");        // Sun Jul 03 00:00:00 BST 2016
    getDate("3/7/2016 00:00:00.0+0100"); // Sun Jul 03 00:00:00 BST 2016
    getDate("3/7/2016T00:00:00.0+0100"); // Sun Jul 03 00:00:00 BST 2016

    getLocalDate("03/07/2016");               // 2016-07-03
    getLocalDate("3/7/2016");                 // null
    getLocalDate("3/7/2016 00:00:00");        // null
    getLocalDate("3/7/2016 00:00:00.0+0100"); // null
    getLocalDate("3/7/2016T00:00:00.0+0100"); // null
}

正如您所看到的,当两个格式化程序中使用相同的模式时,DateTimeFormatter 最终会生成空值,您希望看到的日期与 SDF 的日期相同。在这种情况下,我希望删除不需要的数据,但事实并非如此。

那么,我们如何创建一个强大的日期/时间解析器?!


因此,可能还有其他答案,但我提出的答案适合我遇到的最极端的情况。首先,我将 dd/MM 减少为 d/M。这表示预期字符的最小数量,因此可以完全解析两位数。请注意,您还可以使用 new DateTimeFormatterBuilder().parseLenient() 但这似乎没有必要。

其次,我决定在格式模式本身中使用可选子句。这允许您指定可能不提供哪些部分,这正是我试图解决的情况。

留给我们:

DateTimeFormatter.ofPattern("d/M/yyyy[' ']['T'][H:mm[:ss[.S]]][X]");

现在将处理提供带或不带时间的日期,包括 T 分隔符、秒、毫秒和区域偏移量。

运气好的话,这可以帮助别人!

private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyyy[' ']['T'][H:mm[:ss[.S]]][X]");

public LocalDate getRobustLocalDate(String value) {
    try {
        return LocalDate.parse(value, formatter);
    } catch (DateTimeParseException e) {
        return null;
    }
}

@Test
public void testDates() {
    getRobustLocalDate("03/07/2016");               // 2016-07-03
    getRobustLocalDate("3/7/2016");                 // 2016-07-03
    getRobustLocalDate("3/7/2016 00:00:00");        // 2016-07-03
    getRobustLocalDate("3/7/2016 00:00:00.0+0100"); // 2016-07-03
    getRobustLocalDate("3/7/2016T00:00:00.0+0100"); // 2016-07-03
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 SimpleDateFormat 转换为 DateTimeFormatter 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会

随机推荐

  • 如何从数组中获取最多代表的对象

    我有一个包含一些对象的数组 并且有几个相似的对象 例如 水果 苹果 橙子 苹果 香蕉 香蕉 橙子 苹果 苹果 从该数组中获取最多代表的对象的最有效方法是什么 在这种情况下 它将是 apple 但是您将如何有效地计算它呢 不要重新发明轮子 在
  • google.load 导致 dom/screen 为空

    我正在尝试异步添加谷歌可视化 但遇到了问题 我已将范围缩小到导致问题的 google load 当 google load 部分 js 运行时 我得到一个空的屏幕 dom 任何人都知道我做错了什么 我也尝试过使用 google setOnL
  • 推送秘密变更集

    这可能看起来很矛盾 我知道秘密变更集应该是私有的 但是如果我想备份这些秘密变更集怎么办 我并行处理一些分支 有时我想推送一个分支 但不想推送其他分支 为了实现这一目标 我在不同的克隆中工作 但我讨厌那样 所以现在 Mercurial 有阶段
  • 全局授权过滤器不适用于 Swagger UI Asp.net Web Api

    我正在实施招摇的用户界面 https swagger io tools swagger ui 对于我的 Asp net WEB Api 项目 我使用默认值System Web Http AuthorizeAttribute 我已将其注册到我
  • 同一虚拟机中已存在另一个未命名的 CacheManager (ehCache 2.5)

    这就是我运行 junit 测试时发生的情况 Another CacheManager with same name cacheManager already exists in the same VM Please provide uniq
  • 让 foreach() 和 ggplot2 和谐相处

    我有一组调查数据 我想生成按受访者所在国家 地区分组的特定变量的图 到目前为止 我编写的生成绘图的代码是 countries lt isplit drones drones v3 foreach country countries dopa
  • 将 MapKit 用户坐标转换为屏幕坐标时遇到问题

    好吧 这实际上是一个线程中的三个不同的问题 1 我正在使用 void viewDidLoad super viewDidLoad mapView setFrame CGRectMake 100 100 520 520 mapView set
  • 在不知道 Clojure 中的键的情况下,如何将映射解构为键值对?

    假设我有一张这样的地图 a 1 b 2 c 3 我想像这样映射它 注意 非工作伪代码 mapcat fn key key a value value a println key key a n value value a 如果不先获取函数的
  • uvicorn 在 AWS Fargate 上 1-2 分钟后关闭

    我在 AWS Fargate 上使用 Python 3 10 1 和应用程序负载均衡器部署了 FastAPI 0 81 0 uvicorn 0 18 3 服务器在我的本地 Docker 中无限期地运行 如预期 但是在 AWS 上 应用程序总
  • 如何在 Laravel 5 中导入 symfony 进程类?

    我想知道如何在 laravel 5 中导入 symfony 进程类 我在 laravel 的控制台中使用了它 但显示错误 未找到 进程 类 use Symfony Component Process Process 这样你就可以使用 Pro
  • Java 对象序列化性能技巧

    我必须将一棵巨大的对象树 7 000 个 序列化到磁盘中 最初 我们用 Kodo 将这棵树保存在数据库中 但它会进行成千上万的查询才能将这棵树加载到内存中 并且会占用本地宇宙可用时间的很大一部分 我为此尝试了序列化 并且确实获得了性能改进
  • 将 Json 对象导出到文本文件

    我正在尝试编写一个 Json 对象 JsonExport 并且想将其内容写入文本文件 我正在使用 max4live 将数据从 Audio DAW 导出到 Json 以便导出到服务器 但之后我希望在文本文件中看到整个 Json 对象 var
  • 如何仅使用日期从 DATETIME 列中进行选择?

    我的表上有一个 DATETIME 列 用于存储创建记录的时间 我只想选择在特定日期创建的记录 如果我尝试 SELECT FROM myTable WHERE postedOn 2012 06 06 即使表中有很多行 它也不返回任何行post
  • 我们如何在 Angular 4 中获取 HttpClient 状态代码

    嗨 Angular 新手 我面临着获取 HTTP 状态代码的问题 该代码位于 HTTP 模块中 我可以使用轻松获取响应代码响应状态 但是当我使用HttpClient模块我无法获取response status 它显示找不到状态 那么 我怎样
  • C:负数和余数背后的数学

    这似乎是处理 Remainder Mod 时被问到的第一件事 而我对此有点碰壁 我正在用一本教科书和一堆 C 代码自学编程 鉴于我没有真正的教练说 不 不 它实际上是这样工作的 我想我应该在这里尝试一下 不过 我还没有找到数学部分的结论性答
  • 如何在 clojure 中创建可执行文件?

    我一直在使用 Clojure Box 在 REPL 环境中学习 clojure 如何制作可执行文件 jar 我想知道这样的事情是否可能 在记事本上编写 clojure 代码并将其命名为project clj 编译项目 clj 获取可执行文件
  • 构建此 Linq-to-Events 拖放代码的最佳方法是什么?

    我正在尝试处理拖放交互 其中涉及鼠标按下 鼠标移动和鼠标向上 这是我的解决方案的简化重现 按下鼠标时 创建一个椭圆并将其添加到画布上 鼠标移动时 重新定位椭圆以跟随鼠标 鼠标松开时 会更改画布的颜色 以便清楚地看出您正在拖动哪一个 var
  • 如何克服 grails 服务中的 StaleObjectStateException

    我引入了一个 TransactionService 我在控制器中使用它来执行乐观事务 它应该 尝试执行给定的事务 关闭 如果失败则回滚 如果失败再试一次 它基本上看起来像这样 class TransactionService transac
  • 哪些 Spark 转换会导致 Shuffle?

    我很难在 Spark 文档中找到导致随机播放的操作和不会导致随机播放的操作 在这个列表中 哪些会导致洗牌 哪些不会 映射和过滤器则不然 但是 我不确定其他人的情况 map func filter func flatMap func mapP
  • 将 SimpleDateFormat 转换为 DateTimeFormatter

    因此 当尝试使用 SimpleDateFormat 和 Date 替换一些遗留代码以使用 java time DateTimeFormatter 和 LocalDate 时 我遇到了问题 这两种日期格式不等效 在这一点上 我必须说我知道这两