使用24Dec到24/12或24/12/2009的正则表达式转换日期

时间:2009-06-30 12:21:06

标签: regex datetime

我得到的旅行确认如下: “SQ 966 E 27JUL SINCGK” = "Airline Space Flight Space BookingClass Space Date_with_Month_as_name Space 3LetterFrom 2LetterTo"。 我可以使用正则表达式将所有这些切成碎片,然后将其提交到网站。但该网站预计将于2009年7月27日或27日至少27/07。有没有办法根据输入中的一个部分转换正则表达式结果。 Jan - > 01,2月 - > 02 ... Dec - > 12。

(正则表达式是Java)

4 个答案:

答案 0 :(得分:5)

DateFormat是一个更合适的课程:

DateFormat output = new SimpleDateFormat("dd/MM", Locale.US);
DateFormat input = new SimpleDateFormat("dd MMM", Locale.US);
System.out.println(output.format(input.parse("24 Dec")));

输出:

24/12

答案 1 :(得分:1)

在Perl语法(s{pattern}{replacement})中:

s{([0-9][0-9])JAN}{\1/01}
s{([0-9][0-9])FEB}{\1/02}
s{([0-9][0-9])MAR}{\1/03}
s{([0-9][0-9])APR}{\1/04}
s{([0-9][0-9])MAY}{\1/05}
s{([0-9][0-9])JUN}{\1/06}
s{([0-9][0-9])JUL}{\1/07}
s{([0-9][0-9])AUG}{\1/08}
s{([0-9][0-9])SEP}{\1/09}
s{([0-9][0-9])OCT}{\1/10}
s{([0-9][0-9])NOV}{\1/11}
s{([0-9][0-9])DEC}{\1/12}

(是的,这很长很难看,但它可能会奏效)。

答案 2 :(得分:0)

它不是正则表达式解决方案,但您可以使用SimpleDateFormat来帮助您进行最终格式化。您应该在JavaDoc中注意,这不是开箱即用的线程安全选项。

或者,您可以使用DateFormatSymbols.getShortMonths()并迭代几个月来识别索引*并手动设置字符串格式。

*别忘了添加1;)

修改

我不确定您在Java regex中寻找什么是可能的,而不需要进行代码更改。 Java不支持Perl支持的条件结构,因为Java提供if-then-else支持作为语言功能。

答案 3 :(得分:0)

我会非常小心地使用正则表达式,因为他们没有告诉你转换是如何进行的。

手动提取每一点信息。完整性检查所有内容,然后使用SimpleDateFormat解析器从中获取可以使用的Date对象。