Java 如何转换为GST日期?

Java 如何转换为GST日期?,java,date,Java,Date,在做了大量的谷歌研究之后,我将这个问题发布在这个专家组中。 我发现了许多相关链接,但在我的案例中没有起作用 我正在从数据库中获取一个日期值,其格式为2016-01-12 00:00:00.0。现在,我想将此日期与用户从屏幕用户界面输入的日期进行比较,该屏幕用户界面的格式为2016年1月13日星期四00:00:00 GST 现在我想比较这些日期,即从屏幕输入的日期(2016年1月13日星期四00:00:00 GST)不应大于或等于从DB获取的日期(2016-01-12 00:00:00.0) 对于

在做了大量的谷歌研究之后,我将这个问题发布在这个专家组中。 我发现了许多相关链接,但在我的案例中没有起作用

我正在从数据库中获取一个日期值,其格式为2016-01-12 00:00:00.0。现在,我想将此日期与用户从屏幕用户界面输入的日期进行比较,该屏幕用户界面的格式为2016年1月13日星期四00:00:00 GST

现在我想比较这些日期,即从屏幕输入的日期(2016年1月13日星期四00:00:00 GST)不应大于或等于从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

请在这方面帮助我,因为我从早上开始就在这个问题上结巴。 如果您有任何其他解决方案来比较这些日期,请建议我

我从我的bean类中调用compareDates方法(datefromdate,datetodate),如下所示:

if (!TeltrackDateUtil.compareDates( installationdate, instrumentStaffLnkData.getEffectiveFrom() )) {

String erroMessage = resourceBundle .getString("instrument_add_edit_mandatory_check_linkage_effective_from_ins‌​tallation_date");
 createFacesMessage(erroMessage, facesContext); canProceed = false; 
} 
在此
installationdate=2016-01-12 00:00:00.0
(来自数据库)和
instrumentStaffLnkData.getEffectiveFrom()=2016年1月14日星期四00:00:00 GST
(来自屏幕)

添加一些附加代码:

在DB(Oracle SQL developer)中,它存储为
datetime
,在我的实体类中,它是
Timestamp effectiveFrom

在我的
serviceinpl
类中,我将其设置为TO类变量:

InstrumentTO instrument=setEffectiveFrom(instrumentEntity.getEffectiveFrom())

最后在bean类中:

InstrumentTO instrument = instrumentService.getSelectedInstrument(instrumentId);
instrumentStaffLnkData.setInstrument(instrument); 
Date installationdate = instrumentStaffLnkData.getInstrument().getEffectiveFrom();

然后调用
compareDates()

您可以分析两种不同的格式来确定对象的日期,如下所示:

    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);

但一般来说,我建议您使用@Srikanta在其回答中解释的原因。

如果您使用的是Java 7或更低版本,请选择JodaTime库。在Java8中,可以使用时间API。这些库允许您在时间格式(包括时区)之间切换。该方法中的任何问题都不是由日期格式引起的,因为
日期
没有格式-它只是时间上的一个瞬间。它是在将字符串解析为日期的代码中。顺便说一句:你的方法体可以写得更简洁(和习惯用法)如
returnfromdate.before(toDate)
。请注意,对该方法的调用,如
YourClassName.compareDates(fromDate,toDate)
也可以更简洁地写成
fromDate.before(toDate)
-该方法除了直接调用它之外没有添加任何内容。感谢您的回复。你的意思是说我可以通过直接传递这两个日期来直接使用compareDates()方法吗?Andy,我从我的bean类中调用compareDates(Date fromDate,Date toDate),如下所示:if(!TeltrackDateUtil.compareDates(installationdate,instrumentStaffLnkData.getEffectiveFrom()){String erroMessage=resourceBundle.getString(“仪器添加、编辑、强制、检查、链接、生效、来自安装日期”);createFacesMessage(erroMessage、facesContext);CanProcedure=false;}在本安装日期=2016-01-12 00:00:00.0(来自数据库)和仪器stafflinkdata.getEffectiveFrom()=2016年1月14日星期四00:00:00 GST,来自屏幕。感谢在您的问题中发布相关代码。无法在评论中阅读。