当前位置: 首页 > 知识库问答 >
问题:

Java的阿拉伯日期换算问题

鄢松
2023-03-14

我有一门豆子课

import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;

public class Form {
    private String name;
    private Long numID;
    private String Address;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate date1;

    // getters and setters

}

这在rest控制器类中使用

import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


public class MyController {

    private String MY_URL = "/model.do"
    @RequestMapping(value = {MY_URL}, method = RequestMethod.POST)
    @ResponseBody
    Public Model getModelType(@ModelAttribute Form myForm){

    }


}

现在,当我传递一个阿拉伯日期对象时,该对象编码如下

%D9%A2%D9%A0%D9%A1%D9%A9-%D9%A0%D9%A4-%D9%A1%D9%A5,转换失败,出现以下错误

org.springframework.validation.bindexception:org.springframework.validation.BeanPropertyBindingResult:1错误字段“date1”上对象“form”中的字段错误:被拒绝的值[????-??-??];代码[typemismatch.form.date1,typemismatch.isocheckindate,typemismatch.java.time.localdate,typemismatch];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[form.isoCheckInDate,isoCheckInDate];参数[];默认消息[isoCheckInDate]];默认消息[无法将类型“java.lang.String”的属性值转换为属性“Date1”的必需类型“java.time.localdate”;嵌套异常为org.springframework.core.convert.conversionfailedexception:无法将值“????-??-??”的类型[java.lang.String]转换为类型[@org.springframework.format.annotation.datetimeformat java.time.localdate];嵌套异常为java.lang.IllegalArgumentException:对值[????-??-??

有没有办法处理这种情况?

共有1个答案

翟英达
2023-03-14

虽然我不知道spring框架做了什么以及为什么,但我可以向您展示如何用简单的Java解析您的字符串:

    DecimalStyle defaultDecimalStyle
            = DateTimeFormatter.ISO_LOCAL_DATE.getDecimalStyle();
    DateTimeFormatter arabicDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE
            .withDecimalStyle(defaultDecimalStyle.withZeroDigit('\u0660'));

    String encodedArabicDateStr = "%D9%A2%D9%A0%D9%A1%D9%A9-%D9%A0%D9%A4-%D9%A1%D9%A5";
    String arabicDateStr
            = URLDecoder.decode(encodedArabicDateStr, StandardCharsets.UTF_8);
    LocalDate date = LocalDate.parse(arabicDateStr, arabicDateFormatter);
    System.out.println("Parsed date: " + date);

此代码段的输出为:

解析日期:2019-04-15

唯一的诀窍是告诉格式化程序解析阿拉伯数字。当我们告诉它零数字('\u0660')时,它会计算出其他数字。

 类似资料:
  • 当我使用ITextRenderer将html转换为PDF时,这是我的代码 阿拉伯语连字怎么做?

  • 问题内容: 我正在评估NLTK处理阿拉伯文本的能力,这项研究旨在分析和提取情感。 问题如下: NTLK是否可以处理并允许分析阿拉伯文本? python是否能够操纵\标记阿拉伯文本? 我可以使用Python解析和存储阿拉伯文本吗? 如果python和NTLK不是完成这项工作的工具,那么您会推荐哪些工具(如果存在)? 谢谢。 编辑 根据研究: NTLK仅能阻止阿拉伯文本:链接 Python支持UTF-

  • 我在从网络编码阿拉伯语响应时遇到问题,我正在使用volley调用网络服务 我试图解决这个问题。 我创建了自定义请求,然后在我登录时使用utf-8编码解析网络响应,以检查结果。这给了我奇怪的文字,这里是我的日志{“data”:null,“msg”:“ÙÙÙÙÙˆØØØØØØØØØØØØØØØØØØØØØØØØØ21所有尝试均失败。 谢谢你的帮助谢谢

  • 我正在尝试使用最新的雅虎天气apihttps://weather-ydn-yql.media.yahoo.com/forecastrss它工作得很好,但当我设置语言(lang=ar AE)时,它返回带问号的json响应,而不是阿拉伯字符。例如“城市”:“城市”对于英语来说,这是可以的。 我没看到留档里有关于utf设置的东西 当我打开雅虎的天气页面https://www.yahoo.com/news

  • 问题内容: 我有一个要排序的阿拉伯语单词列表。我曾尝试使用不同的语言环境(例如英语或法语,但希望不高)使用标准的Collat​​or,甚至创建了自己的RuleBasedCollat​​or,但无济于事。显然,默认排序依赖于unicode值顺序,该顺序在许多情况下都有效,但显然不适用于此顺序。 按照javadocs的说明,RuleBasedCollat​​or需要一个字符串,该字符串以您希望它们排序

  • 问题内容: 我有来自服务器的日期,格式为“ 2013-01-20T16:48:43”,我的应用程序同时支持阿拉伯语和英语语言环境。但是,当我将语言环境更改为阿拉伯语时,日期无法解析,因此无法解析。到现在为止我写的是 问题答案: 不要将您的日期解析为阿拉伯语,除了按如下方式尝试通过仅设置“英语区域设置”之外,它还会给您带来错误提示。