提取字符串中的时间可以分为两步:1)识别时间字符串,2)将时间字符串转为java.util.Date或java.time.LocalDateTime等日期时间对象。
识别时间字符串
Java提供了多种方式来识别时间字符串,比如使用正则表达式或者使用第三方库。下面是两条示例:
- 使用正则表达式
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)
来提取时间。
- 使用第三方库
另一个比较流行的时间处理库是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字符串中提取时间:
- 使用正则表达式或者第三方库来匹配时间字符串,然后使用内置的日期时间类(如java.util.Date或java.time.LocalDateTime)将其转换为Java中的日期时间对象。
- 直接使用Java 8及以上版本中引入的新日期时间API,如java.time.LocalDateTime,来解析时间字符串。
希望这篇文章能够帮助您从Java字符串中提取时间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 如何从字符串里面提取时间 - Python技术站