Java日期处理格式不正确

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java日期处理格式不正确相关的知识,希望对你有一定的参考价值。

首先,我是一名学习Java的C#开发人员。我正在转换使用C#编写的程序作为练习,并且在解析从html表单提交的日期时遇到问题。表单以电子邮件形式发送,并且Java程序读取电子邮件并解析正文。我有一个下拉日历,供我偷窥者从中选择日期,但总会有一些混蛋要输入日期并将所有内容弄乱。目前,我正在我的代码中执行此操作:

public void SetDatePlayed(String datePlayed)

    this.datePlayed = LocalDate.parse(datePlayed);

datePlayed是传入的字符串,通常格式为yyyy-MM-dd,但当然有人输入3/7而不是使用表单上的日历下拉列表。 this.datePlayed是一个LocalDate。在C#中,我最终得到的日期假定是2020年-没问题。 LocalDate确实希望使用yyyy-MM-dd格式,而我不知道Java的最佳实践是什么。我整个上午一直在搜索它,并且没有遇到任何其他问题。我不在乎是否正在使用LocalDate,但是我确实需要将其作为日期数据类型,以便稍后可以进行日期检查,排序,搜索等。

答案

您需要使用SimpleDateFormat

首先,您可以使用正则表达式确定日期的格式,然后执行以下操作:

public void SetDatePlayed(String datePlayed)

        final SimpleDateFormat needFormat = new SimpleDateFormat("yyyy-MM-dd");
        final SimpleDateFormat currentFormat = new SimpleDateFormat("dd/MM");
        LocalDate ld = null;
        try 
            ld = LocalDate.parse(needFormat.format(currentFormat.parse(datePlayed)));
            ld = ld.plusYears(LocalDate.now().getYear() - ld.getYear());

         catch (ParseException e) 
            e.printStackTrace();
        
        this.datePlayed = ld;

另一答案

我看到您问题的两种可能解释。我不确定是哪一个,所以我都会回答。

如何将没有年份的日期字符串(例如M/d3/7)解析为LocalDate

你不知道。根据定义,LocalDate必须具有年,月和日。如果您只有一个月零一天,那就是MonthDay

MonthDay md = MonthDay.parse("3/7", DateTimeFormatter.ofPattern("M/d"));

如果要添加当前年份,可以稍后再做:

LocalDate ld = md.atYear(Year.now(/*optionally insert time zone*/).getValue());

如何处理yyyy-MM-ddM/d模式?

这里是一种方法:创建一个识别两种模式的DateTimeFormatter,将字符串解析为TemporalAccessor,检查TemporalAccessor是否支持“年份”字段:

TemporalAccessor ta = DateTimeFormatter.ofPattern("[M/d][yyyy-MM-dd]").parse("3/7");
if (ta.isSupported(ChronoField.YEAR_OF_ERA))  // yyyy-MM-dd
    LocalDate ld = LocalDate.from(ta);
 else if (ta.isSupported(ChronoField.MONTH_OF_YEAR))  // M/d
    MonthDay md = MonthDay.from(ta);
 else 
    // user has entered an empty string, handle error...

以上是关于Java日期处理格式不正确的主要内容,如果未能解决你的问题,请参考以下文章

java读取excel时间格式出现数字怎么处理

日期格式不正确?

JAVA 怎么判断一个字符串是否一个合法的日期格式??

使用 jquery datepicker 时,处理人们以不同格式输入日期的正确方法是啥?

C#日期格式化的几种处理方法(转)

java获取的日期只显示年月日不显示时分秒,怎么处理