【问题标题】:java.text.ParseException Unparsable Date: "0"java.text.ParseException 不可解析日期:“0”
【发布时间】:2023-03-28 09:10:01
【问题描述】:

我正在尝试转换一个字符串

2010-03-09

输入一个日期,进一步得到一年中的哪一天。

String dt = "2010-03-09";
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = new GregorianCalendar();
Date d = date.parse(dt);
cal.setTime(d);
int doy = cal.get(Calendar.DAY_OF_YEAR); 

我不知道为什么会出现这个错误

Exception in thread "main" java.text.ParseException: Unparseable date: "0"

SimpleDateFormat 字符串模式作为我的参数有什么问题吗?

我的条件很严格,字符串格式为

2010-03-09

我有一个这种格式的 4000 个日期的数组

任何帮助将不胜感激,我是日历、日期和 SimpleDateFormat 类的新手

我正在处理数组,上面的示例是一般情况。这是我正在处理的实际案例

public static int[] todoy(String[] dt) {        // input array of String (dates) and will return array of DOY's
    int[] re = new int[size];
    Date d = null;
    for (int i=0;i<size;i++){
        SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = new GregorianCalendar();
        try {
            d = date.parse(dt[i]);
        } catch (ParseException e) {
                e.printStackTrace();
        }
        cal.setTime(d);
        re[i] = cal.get(Calendar.DAY_OF_YEAR); 

    }//fill in array of DOY's 
    return re;
}//inputs date such as 5/2 and returns integer for which day of the year it is

【问题讨论】:

  • 你为什么解析dt[i]而不是dt?是不是打错字了?
  • 与可能从某处提取日期字符串的真实代码相比,您是否简化了代码示例?我没有发现任何问题,并且怀疑其他代码对此负责。
  • 是的,我的代码处理一个字符串数组,但这不应该改变任何东西,因为输入基本相同。
  • 可能是@SebastiaanvandenBroek 所说的。我建议在其中放置一个条件断点并查看导致问题的确切日期。由于您有 4000 个,并且基于原始错字,我猜您正在迭代所有日期,其中一个可能会以某种方式损坏。
  • 导致问题的确切日期是我在此示例中发布的日期。我知道这一点是因为我有一个 system.out 语句通过数组打印出该日期,然后我有另一个语句用相同的数组及其相应的索引打印出一年中的哪一天。

标签: java calendar


【解决方案1】:

你能试试这个代码吗?

  public static int[] todoy(String[] dt) {        // input array of String (dates) and will return array of DOY's
    int[] re = new int[size];
    Date d = null;
    if(dt == null) return null;

    for (int i=0;i<size;i++){
        if(dt[i] != null && dt[i] != "0") {
            SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = new GregorianCalendar();
            try {
                d = date.parse(dt[i]);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            if(d != null ) {
                cal.setTime(d);
                re[i] = cal.get(Calendar.DAY_OF_YEAR);
            }
        }
    }//fill in array of DOY's
    return re;
}

您需要用 try-catch 子句包围您的 parse 方法。似乎其中一个条目的格式不正确。当您捕获该异常时,您可以检查到底是什么原因。

【讨论】:

  • 我得到了同样的错误,这次错误显示了4次而不是一次,最后出现了78。 78 是正确答案,但我不明白为什么这些错误消息现在大量出现,哈哈。 @akhil_mittal
  • 你有没有调试检查是什么输入导致了异常?
  • 现在是我所有的输入。我在输出中得到了正确的答案,但这些错误消息在正确答案输出之前显示
  • 我尝试了一堆不同的输入,但同样的事情一直在发生。 4 条相同错误的消息,然后是正确答案
  • 实际上,您的代码对于输入 2010-03-09 工作正常,问题出在其他地方。您是否在某种循环中使用它?如果是,请也分享代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多