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

使用SimpleDataFormat、Java进行不正确的日期分析

申辉
2023-03-14

我需要使用日期模式“yyyy-MM-dd”从输入字符串中解析一个日期,如果日期将以任何其他格式出现,则抛出一个错误。

这是我解析日期的一段代码:

private void validateDate() throws MyException {
  Date parsedDate;
  String DATE_FORMAT = "yyyy-MM-dd";
  try{
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate());
    System.out.println(parsedDate);
  } catch (ParseException e) {
    throw new MyException(“Error occurred while processing date:” + getMyDate());
  }

}

当我在myDate中输入“2011-06-12”这样的字符串时,我将得到输出“2011年9月29日星期四00:00:00 EEST”,这很好。

当我发送了一个不正确的字符串,比如“2011-0612”,我得到了预期的错误。

当我试图传递一个仍然有两个“连字符”的字符串时,问题就开始了,但是位数是错误的。示例:

输入字符串“2011-06-1211”结果“2014年9月23日星期二00:00:00 EEST”。

输入字符串“2011-1106-12”结果“Mon Feb 12 00:00:00 EET 2103”。

我无法更改字符串日期的输入格式。

我怎样才能避免呢?

共有2个答案

常睿范
2023-03-14

同样的问题,我注意到,当我在main方法中直接使用此代码时,它返回正确的日期,当我通过一个单独的方法使用相同的代码时,它返回错误的日期

String string = "03/01/2015";
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
Date date1 = format.parse(string);
System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date));

函数中返回错误日期的代码

public Date isValidDate(String dateToValidate, String dateFormat){

  if(dateToValidate == null){
     return null;
  }

  DateFormat format = new SimpleDateFormat(dateFormat,Locale.ENGLISH);
  //format.setLenient(false);

  Date date;
  try {

      date = format.parse(dateToValidate);

  } catch (ParseException e) {

      e.printStackTrace();
      return null;
  }

  return date;
}
宇文飞翮
2023-03-14

您是否尝试过在SimpleDataFormat上调用setLenient(false)

import java.util.*;
import java.text.*;

public class Test {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        format.setLenient(false);
        Date date = format.parse("2011-06-1211"); // Throws...
        System.out.println(date);
    }
}

请注意,我还建议您设置SimpleDateFormat的时区和区域设置。(或者,使用Joda Time代替...)

 类似资料:
  • 背景: 在我的数据库表中,我有两个时间戳 当我执行“按时间戳ASC排序”时,时间戳2被认为是更大的时间戳(这是正确的)。 要求:我需要得到这些时间戳的差异(timeStamp2-timeStamp1) 我的实施: 答案应该是238ms,但返回的值是-653ms。我不确定我做错了什么。有什么建议吗?

  • 在我的android应用程序中,我正在努力获取提供日期的周数。但是它没有给我正确的周数,我正在使用下面的代码来获取周数。 从上述日历中可以看出,截至2016年1月,属于第1周的天数只有第1、第2和第3天。第二周的相关天数为第四、第五、第六、第七、第八、第九和第十天。第三周的相关天数为11、12、13、14、15、16和17日,依此类推。但对于2016年1月12日,上述代码给出了第2周,而不是第3周

  • 这是我目前正在处理的问题。 因此,我需要帮助更正今天日期的月份,100天后的日期,我生日的日期,和我生日后的10,000天。任何帮助或洞察力都非常感谢。

  • 可能很简单,但是我找不到正确的格式来解析数据帧中的日期。 解析日期:2021年4月1日Thu(df名称:df data,列名:Date) 我的尝试: “”date_p=pd.to_datetime(nba_data.date,format=“%a%b%-m%y”)“” 我知道“-”根据错误是格式中的一个错误指令。然而,据我所知,只有%m会指01而不是1。我的假设对吗。 会非常感谢任何帮助。

  • 问题内容: 我正在学习Go,并且正在尝试对日期时间进行JSON解组。 我有一个用C语言编写的程序生成的JSON,我正在输出我认为有效的ISO8601 / RFC3339时区偏移量。我正在使用以下格式字符串: (请注意,本机不支持,我有一个包装器将其替换为纳秒级)。 然后,将产生以下结果: 但是在Go中取消编组此功能将无效:https : //play.golang.org/p/vzOXbzAwdW

  • 我有一个Java,它被转换成,这样就可以用以下样式查看它: i、 e 现在的问题是,当我对日期列进行排序时,日期并没有按应有的顺序进行排序。 当前行为:预期行为: 我知道这是因为排序是基于字符串发生的。 我的问题是:有没有办法保留我想要显示日期的格式,并且仍然能够将它们作为日期排序?我可以把它们转换成字符串以外的任何形式吗? 请注意,我无法编辑排序机制。我唯一的选择是为专栏提供一个合适的日期格式。