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日

相关文章

  • JPA的多表复杂查询的方法示例

    JPA是Java Persistence API的缩写,它是Java EE中的一个API,提供了Java对象到关系数据库表之间的映射(ORM)功能。JPA中的多表复杂查询是指需要查询多个关联表的查询操作。下面将介绍JPA的多表复杂查询的方法示例。 一、JPA多表查询基本操作 定义多表查询的类 在JPA中,可以定义一个类来封装多表查询的结果,该类中包含了所有需…

    Java 2023年5月20日
    00
  • 入门到精通Java SSO单点登录原理详解

    入门到精通Java SSO单点登录原理详解 Java SSO单点登录(Single Sign-On)是指用户只需在一处进行认证,就能够在所有的关联系统中访问相应的资源。这对于企业内部的多个系统来说是非常实用的,因为用户只需要登录一次就可以跨系统使用资源,提高了用户的使用体验。 单点登录的实现原理 单点登录实现有很多种方案和实现方式,其中比较常见的实现方式是基…

    Java 2023年5月24日
    00
  • Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法

    Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法攻略 Tomcat是一款使用广泛的Java Web应用服务器,在Linux服务器上也很常见。Tomcat的性能和稳定性与其运行模式密切相关,本文将详细介绍如何在Linux服务器上设置Tomcat的BIO、NIO、APR三种模式,让Tomcat运行更加高效和稳定。 BIO模式设置方法 BIO是…

    Java 2023年5月19日
    00
  • 详解Java无需解压直接读取Zip文件和文件内容

    接下来我将详细讲解如何在Java中无需解压直接读取Zip文件和文件内容的攻略: 支持Java无需解压直接读取Zip文件和文件内容 1. 使用Java的ZipInputStream解压缩并读取文件内容 Java内置的ZipInputStream类可以方便地对Zip文件进行操作,而无需先解压文件。下面是使用ZipInputStream来读取Zip文件的示例代码:…

    Java 2023年5月20日
    00
  • Java常用工具类—集合排序

    下面是Java常用工具类—集合排序的完整攻略: 一、集合排序的介绍 集合是Java中非常重要的一种数据结构,它可以存储多个相同类型的对象。集合中的元素是没有固定顺序的,而如果我们需要按照一定的规则对集合中的元素进行排序,那么就需要使用集合排序的功能。 集合排序可以对一个集合中的元素按照升序或降序进行排序。Java中提供了很多集合排序的方式,如排序工具类、实现…

    Java 2023年5月26日
    00
  • java中断线程的正确姿势完整示例

    针对 “java中断线程的正确姿势完整示例”,以下是完整攻略: 什么是线程中断? 线程中断就是让一个正在运行的线程停止运行,也就是让线程停止执行后续的代码,退出执行状态。 为什么需要中断线程? 中断线程的主要目的是为了优雅的停止线程,避免造成系统死锁或资源泄露等。 Java如何中断线程? Java中断线程通常有两种方式: Thread.interrupt()…

    Java 2023年5月19日
    00
  • 详解SpringBoot中的统一功能处理的实现

    我会从以下几个方面讲解“详解SpringBoot中的统一功能处理的实现”: 1.什么是SpringBoot中的统一功能处理2.实现统一功能处理的方式3.示例1:统一异常处理4.示例2:统一日志处理 1.什么是SpringBoot中的统一功能处理 在SpringBoot应用中,我们常常需要实现一些特定的功能,如统一异常处理、统一日志处理等。为了避免在每个Con…

    Java 2023年5月15日
    00
  • 什么是Java并发编程?

    什么是Java并发编程? Java并发编程是指在Java程序中使用多线程实现并发任务执行的一种编程方式。多线程实现可以充分发挥多核CPU的优势,提高程序的并发处理能力和性能。 Java中的并发编程常用类和接口 Thread:线程类,是Java中用于创建和管理线程的类。 Runnable:代表线程要执行的任务,可以作为Thread类的构造参数使用。 Lock:…

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