我正在尝试使用FastDateFormat
字符串“0759”和“1401”进行解析,但获得ParsingException
。
它与SimpleDateFormat
一起工作正常,但我想避免使用它,因为它不是线程安全的。我正在检查当前时间是否在特定的时间范围内以采取其他措施。我想使用FastDateFormat
代替下面的代码。请指教
try{
SimpleDateFormat time_to_string = new SimpleDateFormat("HHmm");
String executionEndTime = time_to_string.format(stepExecution.getEndTime());
Date emailDeliveryStartTime =
(Date) time_to_string.parse("0759");
Date emailDeliveryEndTime =
(Date) time_to_string.parse("1401");
Date currentSystemTime = (Date) time_to_string.parse(executionEndTime);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(emailDeliveryStartTime);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(emailDeliveryEndTime);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(currentSystemTime);
Date isEmailTime = calendar3.getTime();
if (isEmailTime.after(calendar1.getTime()) && isEmailTime.before(calendar2.getTime())) {
//return flowexecutionstatus
}
} catch (ParseException ex) {
//log message
}
答案 0 :(得分:1)
FastDateFormat.parse(String)
州的文件:
相当于
DateFormat.parse(String)
。 有关详细信息,请参阅DateFormat.parse(String) 。
现在有DateFormat.parse(String)
个州的文件:
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。
有关详细信息,请参阅parse(String, ParsePosition) 方法 日期解析。
parse(String, ParsePosition)
的文档说明:
此解析操作使用
calendar
生成日期。 作为一个 结果,calendar
的日期时间字段和TimeZone值可能 已被覆盖,具体取决于子类实现。任何 之前通过调用setTimeZone设置的TimeZone值 可能需要恢复以进行进一步的操作。
因此,我们可以从上面得到的结论是FastDateFormat.parse(String)
基本上使用calendar
对象,然后覆盖该对象的日期时间字段,然后生成Date
它的对象。
但SimpleDateFormat.parse(String)
的工作存在细微差别。没有覆盖parse(String)
方法,但parse(String, ParsePostion)
被覆盖且其documentation状态:
此解析操作使用日历生成日期。 所有的 日历的日期时间字段在解析之前被清除,并且 日历的日期时间字段的默认值用于任何 缺少日期时间信息。例如,年份值 如果没有给出年份值,则使用GregorianCalendar解析日期为1970年 来自解析操作。 TimeZone值可能会被覆盖, 取决于给定的模式和文本中的时区值。任何 之前通过调用setTimeZone设置的TimeZone值 可能需要恢复以进行进一步的操作。
换句话说,我认为SimpleDateFormat.parse(String)
能够提供所需的结果,因为它替换了缺失字段的默认值,而FastDateFormat.parse(String)
无法解析,因为您缺少字段您提供的日期时间字符串,无法替换。
最后,尽管您尚未展示如何实例化FastDateFormat
变量。如果您已实例化为:
FastDateFormat time_to_string = FastDateFormat.getInstance();
然后我会建议您使用以下内容:
FastDateFormat time_to_string = FastDateFormat.getInstance("HHmm");