在做了很多谷歌研究后,我在这个专家组中发布了这个问题。 我找到了许多相关的链接,但在我的情况下不起作用。
我从数据库中获取日期值,格式为 2016-01-12 00:00:00.0 。现在我想将此日期与用户从屏幕UI输入的日期进行比较,该日期为 Thu Jan 13 00:00:00 GST 2016 。
现在我要比较这些日期,即从屏幕输入的日期(2016年1月13日00:00:00 GST 2016)不应该大于或等于从DB获取的日期(2016-01-12 00:00:00.0)。
我正在使用的日期比较:
public static boolean compareDates(Date fromDate, Date toDate) {
if (fromDate.before(toDate)) {
return true;
}
return false;
}
这不起作用,因为日期格式与我的感觉不相似。
所以我想将2016-01-12 00:00:00.0转换为2016年1月12日00:00:00 GST 2016.
请帮助我,因为我在这个问题的早上被困住了。 如果您有任何其他解决方案来比较这些日期,请建议我。
我从我的bean类调用方法compareDates(Date fromDate,Date toDate),如下所示:
if (!TeltrackDateUtil.compareDates( installationdate, instrumentStaffLnkData.getEffectiveFrom() )) {
String erroMessage = resourceBundle .getString("instrument_add_edit_mandatory_check_linkage_effective_from_installation_date");
createFacesMessage(erroMessage, facesContext); canProceed = false;
}
在此installationdate = 2016-01-12 00:00:00.0
(来自数据库)和instrumentStaffLnkData.getEffectiveFrom() = Thu Jan 14 00:00:00 GST 2016
来自屏幕。
添加一些额外的代码:
在DB(Oracle SQL开发人员)中,它存储为datetime
,在我的Entity类中为Timestamp effectiveFrom
。
在我的ServiceImpl
课程中,我将其设置为TO类变量:
InstrumentTO instrument = setEffectiveFrom(instrumentEntity.getEffectiveFrom());
最后在bean类中:
InstrumentTO instrument = instrumentService.getSelectedInstrument(instrumentId);
instrumentStaffLnkData.setInstrument(instrument);
Date installationdate = instrumentStaffLnkData.getInstrument().getEffectiveFrom();
然后拨打compareDates()
。
答案 0 :(得分:2)
您可以将两种不同的格式解析为日期对象,如下所示:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S", Locale.ENGLISH);
Date dateFromDatabase = df.parse("2016-01-12 00:00:00.0");
DateFormat df2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
Date dateFromUi = df2.parse("Thu Jan 12 00:00:00 GST 2016");
compareDates(dateFromDatabase, dateFromUi);
但一般情况下,我会建议您使用Joda Time,因为@Srikanta在答案中已解释过。
答案 1 :(得分:1)
如果您使用的是Java 7或更低版本,请选择JodaTime库。在Java 8中,您可以使用Time API。这些库允许您在包括时区的时间格式之间切换。通过更容易比较。