java.text.ParseException不可解析日期:“0”;0“;

java.text.ParseException不可解析日期:“0”;0“;,java,calendar,Java,Calendar,我正试图转换一个字符串 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);

我正试图转换一个字符串

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"
SimpleDataFormat字符串模式作为参数是否有问题

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

2010-03-09
Bc我有一个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
public static int[]todoy(String[]dt){//输入字符串数组(日期),并将返回DOY的数组
int[]re=新的int[size];
日期d=空;

对于(inti=0;i你能试试这个代码吗

  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;
}
public static int[]todoy(String[]dt){//输入字符串数组(日期),并将返回DOY的数组
int[]re=新的int[size];
日期d=空;
如果(dt==null)返回null;

对于(inti=0;iWhy您正在解析
dt[i]
而不是
dt
?这是一个打字错误吗?与可能从某处提取日期字符串的实际代码相比,您是否简化了代码示例?我没有发现任何错误,并且怀疑是其他代码造成的。是的,我的代码处理字符串数组,但这不应该改变任何内容,因为输入本质上是same。可能是@SebastiaanvandenBroek所说的。我建议在其中放置一个条件断点,并查看导致问题的确切日期。由于您有4000个断点,并且根据最初的输入错误,我猜您正在迭代所有日期,其中一个可能以某种方式损坏。导致问题的确切日期是我在本例中发布的一条。我之所以知道这一点,是因为我有一个system.out语句通过数组打印该日期,然后我有另一条语句使用同一数组及其相应的索引打印一年中的某一天。我得到了相同的错误,这次错误显示了4次,而不是仅显示一次,最后出现了一个78。78是正确答案,但我不明白为什么这些错误消息现在大量出现lol.@akhil_mittalDid您是否调试以检查导致异常的输入?现在是我所有的输入。我在输出中得到了正确答案,但这些错误消息在正确答案输出之前显示。我正在尝试一系列不同的方法输入,同样的事情不断发生。4条相同错误的消息,然后正确的答案实际上您的代码对输入工作正常
2010-03-09
,问题出在其他地方。您是否在某种循环中使用它?如果是,请分享代码。