gpt4 book ai didi

java - 如何在字符串中搜索可解析的日期

转载 作者:行者123 更新时间:2023-12-02 03:33:33 26 4
gpt4 key购买 nike

我的字符串可能包含也可能不包含要解析的日期(例如使用 java.time.format.DateTimeFormatter (自 java 8 起)或 java.text.DateFormat 等类)

示例:

search for a date of the format yyMMdd HH-mm-ss in the String This was happend at: 140327 12-08-12, yeah.

日期的格式可能会有所不同,因此我无法使用预定义的正则表达式。

在字符串中搜索日期的最佳方法是什么?例如,是否可以从 DateTimeFormatter 获取正则表达式?

我唯一的想法是计算 yMd 等,为其创建一个正则表达式,但似乎就像我上面的例子一样丑陋......

编辑:

日期解析类现在已在上面精确说明。

但是确切的解析器并不那么重要:我需要一些日期解析器模式和正则表达式模式来搜索字符串中的日期,然后解析找到的字符串。

解析器模式使用的确切语法也不是那么重要,它可以使用上面示例中的另一种语法。

我不知道编译时的确切日期格式。用户将输入日期格式模式(如yyMMdd HH-mm-ss),然后我必须在字符串中搜索具有此模式的日期。 (我可以编写一个自己的函数来将日期格式模式转换为正则表达式模式,但是......也许这已经存在了?)

最佳答案

描述

要根据用户所需的日期时间时间格式构造正则表达式,我只需采用其格式字符串并用已知的正则表达式等效项替换各种 block 。换句话说,如果他们输入 yy 那么这意味着正则表达式 [0-9]{2}yyyy 意味着 [0 -9]{4}

示例

现场演示

https://repl.it/C1Rc/19

Java 代码

class Main {

public static void main(String[] args) {

System.out.println( convert("yyyyMMdd") );
System.out.println( convert("yyyy-MM-dd") );
System.out.println( convert("yyyyMMdd HH:mm") );
System.out.println( convert("yyyyMMdd HH:mm:ss") );
System.out.println( convert("yyyy MMM dd") );


}

public static String convert(String original) {

String Output = original;
System.out.println("");
System.out.println(original);

// Year
Output = Output.replaceAll("yyyy", "[0-9]{4}");
Output = Output.replaceAll("yy", "[0-9]{2}");

// Month
Output = Output.replaceAll("MMMM", "(?:January|Feburary|March|April|May|June|July|August|September|October|November|December)");
Output = Output.replaceAll("MMM", "(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)");
Output = Output.replaceAll("MM", "(?:0[0-9]|1[0-2])"); // 00-12

// Day
Output = Output.replaceAll("dddd", "(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)");
Output = Output.replaceAll("ddd", "(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)");
Output = Output.replaceAll("dd", "(?:[0-2][0-9]|3[01])"); // 00-31

// Hour
Output = Output.replaceAll("HH", "(?:[0-1][0-9]|2[0-3])"); // 24 hour format
Output = Output.replaceAll("hh", "(?:0[0-9]|1[0-2])"); // 12 hour format

// Minutes
Output = Output.replaceAll("mm", "[0-5][0-9]"); // 0-59

// Seconds
Output = Output.replaceAll("ss", "[0-5][0-9]"); // 0-59


// Meridian
Output = Output.replaceAll("EE", "(?:AM|PM)"); // AM or PM
Output = Output.replaceAll("ee", "(?:am|pm)"); // am or pm

// System.out.println(Output);
return Output;
}

}

示例输出

yyyyMMdd
[0-9]{4}(?:0[0-9]|1[0-2])(?:[0-2][0-9]|3[01])

yyyy-MM-dd
[0-9]{4}-(?:0[0-9]|1[0-2])-(?:[0-2][0-9]|3[01])

yyyyMMdd HH:mm
[0-9]{4}(?:0[0-9]|1[0-2])(?:[0-2][0-9]|3[01]) (?:[0-1][0-9]|2[0-3]):[0-5][0-9]

yyyyMMdd HH:mm:ss
[0-9]{4}(?:0[0-9]|1[0-2])(?:[0-2][0-9]|3[01]) (?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]

yyyy MMM dd
[0-9]{4} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-2][0-9]|3[01])

关于java - 如何在字符串中搜索可解析的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com