gpt4 book ai didi

java - Java 中阿拉伯语和常规日期的日期解析问题

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:10 25 4
gpt4 key购买 nike

我有一个日期转换器函数,例如:

public static LocalDate getLocalDateFromString(String dateString) {
DecimalStyle defaultDecimalStyle = DateTimeFormatter.ISO_LOCAL_DATE.getDecimalStyle();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE.withDecimalStyle(defaultDecimalStyle.withZeroDigit('\u0660'));
LocalDate date = LocalDate.parse(dateString, dateTimeFormatter);
return date;
}

它适用于像 ٢٠١٩-٠٤-١٥ 这样的阿拉伯日期,但是当我传递像 2019-07-31 这样的正常日期时,它会抛出异常,因为格式化程序是不同类型的:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2019-07-31' could not be parsed at index 0

我无法控制传递的日期,因为它是由用户传递的。

如何使用同一个函数来解析两个日期?

最佳答案

了解你的字符串

DateTimeFormatter 不会让这对您来说很容易。我推测这个选择背后可能有一个目的:如果你能使自己进入这样一种情况,你事先知道你要解析的字符串中使用了什么样的数字,那就更好了。你可以考虑一下:你能说服你的字符串的来源将这个信息传递给你吗?

品尝并采取相应行动

如果没有,当然有办法。以下是低级但应该是通用的。

public static LocalDate getLocalDateFromString(String dateString) {
DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
// Take a digit from dateString to determine which digits are used
char sampleDigit = dateString.charAt(0);
if (Character.isDigit(sampleDigit)) {
// Subtract the numeric value of the digit to find the zero digit in the same digit block
char zeroDigit = (char) (sampleDigit - Character.getNumericValue(sampleDigit));
assert Character.isDigit(zeroDigit) : zeroDigit;
assert Character.getNumericValue(zeroDigit) == 0 : zeroDigit;
DecimalStyle defaultDecimalStyle = dateFormatter.getDecimalStyle();
dateFormatter = dateFormatter
.withDecimalStyle(defaultDecimalStyle.withZeroDigit(zeroDigit));
}
// If the examined char wasn’t a digit, the following parsing will fail;
// but in that case the best we can give the caller is the exception from that failed parsing.
LocalDate date = LocalDate.parse(dateString, dateFormatter);
return date;
}

让我们试试看:

    System.out.println("Parsing Arabic date string to  "
+ getLocalDateFromString("٢٠١٩-٠٤-١٥"));
System.out.println("Parsing Western date string to "
+ getLocalDateFromString("2019-07-31"));

这段代码的输出是:

Parsing Arabic date string to  2019-04-15
Parsing Western date string to 2019-07-31

关于java - Java 中阿拉伯语和常规日期的日期解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55017576/

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