【发布时间】: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 语句通过数组打印出该日期,然后我有另一个语句用相同的数组及其相应的索引打印出一年中的哪一天。