我正在研究一个程序,该程序告诉文件的最后修改日期是否在日期的范围内,从日期到日期,如果它在范围内,它将复制,但我有错误
File src = new File(sourcefile + File.separator + strErrorFile[i]);
if(sourcefile.isDirectory())
{
ArrayList<Integer> alDateList = date(strList1);
int intDateFrom1 = alDateList.get(0);
int intDateTo1 = alDateList.get(1);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
System.out.println("After Format : " + sdf.format(src.lastModified()));
try
{
lastDate = Integer.parseInt(sdf.format(src.lastModified())); //line 362
} catch (NumberFormatException e) {
e.printStackTrace();
}
if(intDateFrom1 <= lastDate && intDateTo1 >= lastDate)
{
//copy
}
}
错误
java.lang.NumberFormatException: For input string: "09/10/2015"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at org.eclipse.wb.swt.FortryApplication$4.widgetSelected(FortryApplication.java:362)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at org.eclipse.wb.swt.FortryApplication.open(FortryApplication.java:56)
at org.eclipse.wb.swt.FortryApplication.main(FortryApplication.java:610)
答案 0 :(得分:2)
您需要退后一步,看看您需要什么以及拥有什么。
您不希望将lastModified
值转换为String
(通过DateFormatter
),因为它不会给您带来任何实际价值,而不是您认为有一整套专用于处理日期/时间的API
让我们先来看看File#lastModified
JavaDocs声明它返回:
表示文件上次修改时间的长值,以纪元(1970年1月1日格林威治标准时间00:00:00)为单位测量,如果文件不存在或I / O错误,则为0L发生
好的,这实际上很好,因为您可以使用此值生成LocalDateTime
对象...
LocalDateTime ldt = LocalDateTime.ofInstant(new Date(src.lastModified()).toInstant(), ZoneId.systemDefault());
你为什么要这样做?因为LocalDateTime
具有可以轻松与其他LocalDateTime
对象进行比较的方法......
LocalDateTime from = ...;
LocalDateTime to = ...;
if (ldt.isAfter(from) && ldt.isBefore(to)) {
//between...
}
您还可以使用LocalDateTime#equals
来比较两个日期是否相等。
如果你不需要&#34;时间&#34;组件,您可以使用LocalDateTime#toLocalDate
来获取基于日期(没有时间)的对象,但比较过程基本相同
您可以查看this answer,其中包含确定日期/时间值是否介于两个给定日期/时间值之间的总体逻辑
答案 1 :(得分:1)
java.lang.NumberFormatException:对于输入字符串:&#34; 09/10 / 2015&#34;
这不是有效的整数,因此是错误。
您可以采用的一种方法是使用 String.replaceAll()
方法将/
的每个实例替换为空字符串""
,这应该基本上留给我们与09102015
。
note - 当您将此解析为整数时,前导零(0
)将被删除。
示例:
String data = sdf.format(src.lastModified());
然后你可以这样做:
lastDate = Integer.parseInt(data.replaceAll("/",""));