【问题标题】:Comparing a NotesDateTime in JAVA比较 JAVA 中的 NotesDateTime
【发布时间】:2014-10-15 11:38:41
【问题描述】:

Notes 真的不喜欢空白(null) 日期,这让我伤心欲绝。因此,在本机 Notes 应用程序中,我为所有日期字段分配了 GMT 01/10/1970 0:0:0 AM

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

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

【问题讨论】:

  • 老实说,这是个坏主意……您需要与一些魔术常数进行比较,而不是空检查:en.wikipedia.org/wiki/Magic_number_(programming)
  • @Frantisek:比尔使用的魔法常数是格林威治标准时间 01/01/1970 0:0:0 AM。这个常量有点“神奇”,因为 Java 类 Date 将该日期表示为从 01/01/1970 0:0:0 AM GMT 开始的“0 毫秒”。有关此问题的更多解释,请参阅我的答案。

标签: java date comparison xpages


【解决方案1】:

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

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

public static boolean isBlankDate(Date dt) {
    return dt.getTime() == 0;
}

.getTime() 返回由 Date 对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。

如果日期是准确 01/01/1970 0:0:0 AM GMT,则返回0。所以,你唯一需要做的就是测试

dt.getTime() == 0

如果 Date dt 为 01/01/1970 0:0:0 AM GMT,则返回 true,否则返回 false。

【讨论】:

  • 像往常一样非常简单的答案。我们选择日期是因为它是零日期时间,这让事情变得简单多了。谢谢
【解决方案2】:

在 Java 中,您可以通过 firstDate.before(otherDate) 或 firstDate.after(otherDate) 比较日期,它将返回一个布尔值

【讨论】:

  • 这是我在 OpenNTF Domino API 中用于 DateTime.isBefore(DateTime) 和 DateTime.isAfter(DateTime) 的。
  • dt 对象将是当地时间,而 GMT 将是 GMT 时间 - before 和 after 和 equals 是否会处理这个问题?当我执行 dt.equals(GMT) 时,我收到无法解析 GMT 的错误。
【解决方案3】:

如果您要比较日期,java.util.Date 类中的isBefore / isAfter 很有用。 java.sql.Date 允许您创建日期而不是日期时间。

java.util.Calendar 是我通常在我自己的代码中用于日期操作/比较的。 Java API 声明 java.util.Date 已被弃用以支持它。您可以使用 setTime 传入 java.util.Date。 java.util.Calendar 也有语言环境和时区。它也有 before 和 after 方法。

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

【讨论】:

  • 日历对象支持时区
【解决方案4】:

“Notes 真的不喜欢空白(null)日期,让我伤心欲绝。”

其实这不是真的。如果你同时调用 .setAnyTime() 和 .setAnyDate() 你仍然可以保存为 DateTime 但没有任何特定值。

【讨论】:

  • 这在 Java 上下文中可能有点不方便,因为 dateTime.setAnyDate(); dateTime.setAnyTime(); Date date = dateTime.toJavaDate(); 在 .toJavaDate() 处抛出 NotesException。
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2011-06-29
  • 2014-02-06
  • 1970-01-01
相关资源
最近更新 更多