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实现压缩PDF文档

    我会详细讲解如何通过Java实现压缩PDF文档的完整攻略。 1. 背景介绍 PDF文件是常见的文档格式,在传输和存储时,通常需要进行压缩。使用Java程序实现PDF文件的压缩功能,在某些场景下是必不可少的。下面,将详细介绍如何使用Java实现对PDF文档的压缩。 2. 实现过程 2.1 准备工作 在开始实现压缩PDF文档功能之前,需要准备以下工具和环境: J…

    Java 2023年5月31日
    00
  • java二分查找插入法

    当需要在已排序数组中查找元素时,可以使用二分查找算法。如果需要向已排序数组中插入元素,可以使用二分查找插入法。 二分查找插入法的主要思路是通过二分查找找到需要插入的元素在数组中的位置,然后将该元素插入到该位置中。以下是具体的步骤: 首先,定义需要查询的元素 target 和已排序的数组 nums,同时记录数组的左右端点 left 和 right。 计算需要查…

    Java 2023年5月19日
    00
  • JSP 获取真实IP地址的代码

    JSP 获取真实IP地址的代码攻略如下: 步骤一:获取HttpServletRequest对象 首先,我们需要获取HttpServletRequest对象,因为它包含了对象的许多属性和方法。在JSP中,可以直接使用内置对象request获取HttpServletRequest对象。 <% HttpServletRequest request = (Ht…

    Java 2023年6月15日
    00
  • Spring Boot常用注解(经典干货)

    下面是对应的攻略: Spring Boot常用注解(经典干货) Spring Boot 是一个非常流行的 Java 后端框架,使用注解可以让我们更加方便快捷地进行开发。在这篇文章中,我们将详细讲解 Spring Boot 中常用的注解。 @RestController 在 Spring Boot 中,我们可以通过 @RestController 注解来标记一…

    Java 2023年5月19日
    00
  • java Date和SimpleDateFormat时间类详解

    Java Date 和 SimpleDateFormat 时间类详解 Java Date 和 SimpleDateFormat 是 Java 日期/时间处理中最常用的类,可以方便地进行日期和时间格式化、解析和计算。本文将详细讲解 Java Date 和 SimpleDateFormat 的使用方法,包括创建 Date 对象、格式化日期和时间、解析字符串为 D…

    Java 2023年5月20日
    00
  • Java中ReentrantLock4种常见的坑

    当使用Java中的ReentrantLock时,我们需要注意一些常见的问题。 1. 必须使用try-finally语句块 在使用ReentrantLock时,在临界区代码执行完毕后,必须释放锁,否则可能导致其他线程无法进入临界区。同时,在代码执行过程中,可能会抛出异常或执行return语句,这些情况也需要确保锁被正确释放。因此,我们需要使用try-final…

    Java 2023年5月27日
    00
  • SpringBoot整合kafka遇到的版本不对应问题及解决

    下面是关于“SpringBoot整合kafka遇到的版本不对应问题及解决”的完整攻略。 问题描述 在SpringBoot项目中,我们通过kafka实现消息的发送和接收,在整合kafka时,经常会遇到这样的问题,就是当我们在pom.xml文件中配置kafka依赖时,如果选择的版本不正确,就会引发一系列异常。 问题解决 在解决这个问题之前,首先需要了解kafka…

    Java 2023年5月20日
    00
  • Java二维数组实战案例

    关于“Java二维数组实战案例”的完整攻略,我将从以下三个方面进行详细讲解: 二维数组的基本概念和定义方法 Java二维数组的实战案例 示例说明 1.二维数组的基本概念和定义方法 二维数组是指在数组中每个元素也是一个数组的情况,二维数组通常可以看做是一个表格,最常见的就是二维数组的整体表示法。下面是一个基本的Java二维数组定义: //定义一个3行4列的整型…

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