java 如何从字符串里面提取时间

提取字符串中的时间可以分为两步:1)识别时间字符串,2)将时间字符串转为java.util.Date或java.time.LocalDateTime等日期时间对象。

识别时间字符串

Java提供了多种方式来识别时间字符串,比如使用正则表达式或者使用第三方库。下面是两条示例:

  1. 使用正则表达式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TimeExtractor {
    private static final String regex = "\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}"; // 匹配日期时间字符串的正则表达式

    public static LocalDateTime extract(String text) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        if (matcher.find()) {
            String timeStr = matcher.group();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            return LocalDateTime.parse(timeStr, formatter);
        } else {
            throw new IllegalArgumentException("No date time string found in the given text.");
        }
    }
}

上述示例使用了正则表达式来匹配“yyyy-MM-dd HH:mm:ss”格式的日期时间字符串。如果在文本中发现符合这个格式的字符串,则将其解析为java.time.LocalDateTime对象。可以将上面的代码加入你自己的Java应用中,调用TimeExtractor.extract(text)来提取时间。

  1. 使用第三方库

另一个比较流行的时间处理库是Apache Commons Lang, 它提供了DateUtils工具类来解析日期时间字符串。

import org.apache.commons.lang3.time.DateUtils;
import java.time.LocalDateTime;

public class TimeExtractor {
    public static LocalDateTime extract(String text) {
        String[] formats = {
            "yyyy-MM-dd HH:mm:ss",
            "EEE MMM dd HH:mm:ss zzz yyyy"
        };
        try {
            return DateUtils.parseDate(text, formats).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        } catch (ParseException e) {
            throw new IllegalArgumentException("Invalid date time string: " + text, e);
        }
    }
}

上述示例使用了DateUtils.parseDate方法,并将多个日期时间格式传入到这个方法中。如果字符串匹配其中的任何一个日期时间格式,则解析成功,否则将会抛出ParseException异常。返回的java.util.Date对象可以用Date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()转换为java.time.LocalDateTime对象。

转换时间字符串为Date或LocalDateTime对象

Java 8引入了java.time包来重新设计和提升时间处理的API。如果您使用的是Java 8及以上的版本,建议使用新的java.time.LocalDateTime类来处理时间。

示例如下:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TimeExtractor {
    public static LocalDateTime extract(String text) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return LocalDateTime.parse(text, formatter);
    }
}

上述代码中,使用“yyyy-MM-dd HH:mm:ss”格式的数据时间字符串创建了DateTimeFormatter对象,并将字符串解析为LocalDateTime对象。

综上所述,您可以选择以下两种方法来从Java字符串中提取时间:

  1. 使用正则表达式或者第三方库来匹配时间字符串,然后使用内置的日期时间类(如java.util.Date或java.time.LocalDateTime)将其转换为Java中的日期时间对象。
  2. 直接使用Java 8及以上版本中引入的新日期时间API,如java.time.LocalDateTime,来解析时间字符串。

希望这篇文章能够帮助您从Java字符串中提取时间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 如何从字符串里面提取时间 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java构造方法实例详解(动力节点java学院整理)

    我来为你讲解一下Java构造方法实例的攻略。 什么是构造方法? 构造方法是Java程序中一个非常重要的组成部分,它在创建一个对象的时候被调用。构造方法的作用是初始化对象,并为对象的成员变量赋初始值。 Java的构造方法与普通方法有很大的区别,主要表现在以下几个方面: 构造方法的方法名必须与类名相同,且没有返回值类型(包括void),不需要使用return语句…

    Java 2023年5月20日
    00
  • ASP.NET 页面刷新的实现方法(包括html,js)

    ASP.NET 页面刷新的实现方法可以通过 HTML 页面自身的 meta 标记或者使用 JavaScript 来完成。 通过 HTML 页面的 meta 标记实现页面刷新 HTML 页面可以通过设置 meta 标记来控制页面的刷新,具体方法为: <!–每5秒自动刷新页面–> <meta http-equiv="refresh…

    Java 2023年6月15日
    00
  • 详解SpringMVC 基础教程 简单入门实例

    《详解SpringMVC 基础教程》是一篇介绍SpringMVC框架的文章,本文将为读者提供完整攻略,以供参考和学习。 SpringMVC 简介 SpringMVC是基于MVC设计模式的Web框架,它能够帮助开发者快速地搭建Web应用,并提供了丰富的标签和注解,使得开发Web应用变得更加简单。其优点包括组件化、灵活性、可重用性等。 SpringMVC 基础教…

    Java 2023年5月16日
    00
  • 美团面经总结(2023最新)

    分享一份读者面试美团的面经,比较有参考性,感兴趣的可以看看~ 一面 消息队列如何保证可靠性 消息队列如何保证消息幂等性 消息队列的优缺点 为什么用b+树 聚集索引和主键区别,其他引擎怎么做的 平时数据库编码 explain参数 http报文参数有哪些吗? 做题,链表奇偶有序输出 二面 自我介绍 有哪些排序算法? 介绍下快排/堆排/归并排序。 数据库中的索引应…

    Java 2023年5月7日
    00
  • 用python将pdf转化为有声读物

    将PDF转化为有声读物的过程需要使用 Python 中的两个主要库:1. PyPDF2: 用于解析 PDF 文件。2. pyttsx3: 文字转语音库 – 与文本转语音有关。 下面是一个步骤示例,如何在Python中使用PyPDF2和pyttsx3将PDF文档转换为有声读物: 步骤 1 – 安装 PyPDF2 和 pyttsx3 库 在命令提示符中输入以下命…

    Java 2023年6月15日
    00
  • Java多线程常见案例分析线程池与单例模式及阻塞队列

    Java多线程常见案例分析线程池与单例模式及阻塞队列攻略 什么是多线程? 在计算机科学中,多线程(英语:Multithreading)指的是同时运行多个线程执行不同的任务。在线程中,单个处理器(或核心)会执行多个并发执行的任务。这是在现代操作系统中实现并发的一种方式。 什么是线程池? 线程池是预先实例化一定数量的线程,并在它们启动时将它们放入池中。每个任务都…

    Java 2023年5月19日
    00
  • java+mysql实现登录和注册功能

    准备工作 在实现登录和注册功能之前,需要确保Java和MySQL都已经安装好。同时,还需要使用Java的一些开发环境,比如Eclipse或者IntelliJ IDEA,以及MySQL的一些管理工具,如phpMyAdmin或者Navicat。 创建数据库和数据表 首先,需要在MySQL中创建一个名为“mydb”的数据库。可以通过以下命令来实现: CREATE …

    Java 2023年5月19日
    00
  • Java 客户端操作 FastDFS 实现文件上传下载替换删除功能

    Java 客户端操作 FastDFS 实现文件上传下载替换删除功能攻略 什么是 FastDFS? FastDFS 是一个高性能的分布式文件系统,常用于分布式文件存储和视频处理等场景中。FastDFS 将文件日志放在单独的日志服务器上,解决服务器扩展问题。FastDFS 提供了文件上传、删除、替换和路径查询等基本的文件操作接口,同时它还具备了存储单元尺寸的动态…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部