比较JAVA中的NotesDateTime

比较JAVA中的NotesDateTime,java,date,comparison,xpages,Java,Date,Comparison,Xpages,Notes真的不喜欢空白(空)日期,给我带来了无尽的悲伤。因此,在本机Notes应用程序中,我为所有日期字段指定了GMT 01/10/1970 0:0:0 AM的值 然后在时间显示日期,如果它等于GMT时间,我在多值字段中显示“-”作为占位符。我想创建一个小JAVA方法,用于比较传递给GMT日期的日期,如果相同的日期返回true,否则返回false。我认为我对下面的代码还可以,但现在我不确定如何将dt(转换为GMT)与GMT进行比较simple=似乎不起作用,因此我怀疑我存在某种比较冲突。任何指

Notes真的不喜欢空白(空)日期,给我带来了无尽的悲伤。因此,在本机Notes应用程序中,我为所有日期字段指定了GMT 01/10/1970 0:0:0 AM的值

然后在时间显示日期,如果它等于GMT时间,我在多值字段中显示“-”作为占位符。我想创建一个小JAVA方法,用于比较传递给GMT日期的日期,如果相同的日期返回true,否则返回false。我认为我对下面的代码还可以,但现在我不确定如何将dt(转换为GMT)与GMT进行比较simple=似乎不起作用,因此我怀疑我存在某种比较冲突。任何指向正确方向的指针都值得赞赏。我在谷歌上搜索了一下,但找不到直接的答案

public static Boolean isBlankDate(Date dt){
        Boolean rtn = false;
        Session s = ExtLibUtil.getCurrentSession();
        try{
            Date GMT = s.createDateTime("01/01/1970 0:0:0 AM GMT").toJavaDate();
        }catch(NotesException e){
            System.out.println("Date Create Error " + e.toString());
            if (dt = GMT){
                rtn = true;
            }else{
                rtn = false;
            }
            return false;
        }
        //compare dt to GMT and if equal return true else false
        return rtn;
    }

在Java中,您可以按firstDate.before(otherDate)或firstDate.after(otherDate)比较日期。如果要比较日期,它将返回布尔值。Java.util.Date类中的isBefore/
isAfter
非常有用。java.sql.Date允许您创建日期,而不是日期时间

是我在自己的代码中通常用于日期操纵/比较的。JavaAPI声明不赞成使用它。您可以使用
setTime
传入java.util.Date。Calendar还具有区域设置和时区。它还有前后两种方法


Joda是一个被大量使用的Java日期/时间API,但它没有包含在Domino服务器中。

您想检查本机Notes数据字段是否包含您解释为空白(null)的01/01/1970 0:0:0 AM GMT数据值。我假设您从文档中读取数据值,使用
.toJavaDate()
将值转换为Java日期,然后使用您的方法
isBlankDate(Date dt)
测试它是否为1970年1月1日凌晨0:0:0 GMT

如果这是您想要实现的,那么您可以将您的方法简化为

public static boolean isBlankDate(Date dt) {
    return dt.getTime() == 0;
}
.getTime()
返回日期对象表示的自1970年1月1日00:00:00 GMT以来的毫秒数

如果日期恰好是1970年1月1日格林尼治标准时间上午0:0:0,它将返回
0
。因此,您只需进行测试

dt.getTime() == 0
如果日期dt为1970年1月1日格林尼治标准时间上午0:0:0,则返回true,否则返回false。

“Notes真的不喜欢空白(null)日期,这让我悲痛不已。”


事实并非如此。如果同时调用.setAnyTime()和.setAnyDate(),您仍然可以保存为DateTime,但没有任何特定的值。

这就是我在OpenNTF Domino API中对DateTime.isBefore(DateTime)和DateTime.isAfter(DateTime)使用的方法。dt对象将使用本地时间,而GMT将使用GMT时间-before和after和equals是否考虑了这一点?当我执行dt.equals(GMT)时,我得到一个错误,即无法解析GMT。并且Calendar对象具有时区支持。这在Java上下文中可能有点不方便,如
dateTime.setAnyDate();dateTime.setAnyTime();Date Date=dateTime.toJavaDate()
在.toJavaDate()上抛出NotesException。老实说,这不是个好主意。。。与空检查不同,您需要将其与一些神奇常数进行比较:@Frantisek:Bill使用的神奇常数是01/01/1970 0:0:0 AM GMT。这个常数有点“神奇”,因为Java类日期将这个日期表示为从01/01/1970 0:0:0 AM GMT起的“0毫秒”。请参阅我的答案以了解更多关于这个的解释。像往常一样,这是一个非常简单的答案。我们选择日期是因为它是零日期时间,这让事情变得简单多了。谢谢