gpt4 book ai didi

java - 解析奇怪的日期字符串?

转载 作者:行者123 更新时间:2023-12-02 04:37:21 25 4
gpt4 key购买 nike

我实际上正在开发一个扫描 PDF 的项目。这些 PDF 上有日期,但似乎比平常更复杂,因为它是法语日期,而且格式可能会有所不同(月份是 3/4 个字母),例如:

MERMAR17 - LUNJUIL14 ...

而且,我想要以下输出:

17/03 - 14/07 ...

我的代码示例:

String date = "MARJUIN2" 
DateFormat dateFormat = new SimpleDateFormat("EEE'MMM'dd", Locale.FRENCH);
try {
Date varDate = dateFormat.parse(date);
cellString = varDate.toString();
SimpleDateFormat newDF = new SimpleDateFormat("dd/MM", Locale.FRENCH);
cellString = newDF.format(varDate);
}
catch(Exception e) {
e.printStackTrace();
}

这可能吗?或者n/?

最佳答案

好的,这是一个没有 Java-8 或任何外部库的解决方案(尽管它会更容易)。该解决方案基于以下假设:您的输入始终以日期名称开头,其长度始终固定为 3 个字符(“MER”、“LUN”等)。该解决方案通过选择默认年份 2000 来考虑可能的闰日 2 月 29 日。

你可能会问为什么要这么努力。嗯,原因是您拥有的文本资源与 JDK(或 CLDR)中的文本资源不同。因此,您必须设置自己的专用文本资源。 我在解决方案中使用的月份名称只是猜测。您应该根据需要调整这些名称。

static final String[] MONTHS =
{ "JAN", "FEV", "MAR", "AVR", "MAI", "JUIN", "JUIL", "AOÛ", "SEP", "OCT", "NOV", "DEC" };

public static void main(String[] args) throws ParseException {

String s = "MERMAR17 - LUNJUIL14";
String[] parts = s.split(" - ");

SimpleDateFormat parser = new SimpleDateFormat("EEEMMMdd yyyy", Locale.FRENCH);
System.out.println(parser.format(new GregorianCalendar(2015, 2, 18).getTime()));
// shows deviation between your input and JDK-resources: mer.mars18 2015

int m0 = parse(parts[0]);
int m1 = parse(parts[1]);
Date d0 =
new GregorianCalendar(
2000,
m0,
Integer.parseInt(parts[0].substring(3 + MONTHS[m0].length()))
).getTime();
Date d1 =
new GregorianCalendar(
2000,
m1,
Integer.parseInt(parts[1].substring(3 + MONTHS[m1].length()))
).getTime();

SimpleDateFormat format = new SimpleDateFormat("dd/MM");
String result = format.format(d0) + " - " + format.format(d1);
System.out.println(result); // 17/03 - 14/07

}

private static int parse(String input) throws ParseException {
for (int i = 0; i < 12; i++) {
if (input.substring(3).startsWith(MONTHS[i])) {
return i;
}
}
throw new ParseException("Cannot parse month abbreviation in: " + input, 3);
}

关于java - 解析奇怪的日期字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592735/

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