【问题标题】:XPages - Date comparison is wrongXPages - 日期比较错误
【发布时间】:2020-08-12 10:35:44
【问题描述】:

由于某种原因,我的代码在我的日期比较中返回了反向答案。 (SSJS)

我有 2 个代码块,一个在下面,另一个只是将 if(dtCreated dtCutoff)

try{

var sdf = new java.text.SimpleDateFormat("dd-MM-yyyy");
var dtCreated = document1.getItemValueDate("CreatedDate");
var dtCutoff = new Date(2002, 03, 22, 00, 30);

dtCreated = dtCreated == null?"":sdf.format(dtCreated);
dtCutoff = dtCutoff == null?"":sdf.format(dtCutoff);
print("ONE: Created: " + dtCreated);
print("ONE: Cutoff: " + dtCutoff);

if(dtCreated < dtCutoff) {
print ("1.1  created before cutoff return true");
    return true;
}else{
print ("1.2  created before cutoff return false")
    return false;
}

}catch(e){
    openLogBean.addError(e,this.getParent());
}

由于某种原因,结果似乎混淆了,创建日期在截止日期之后,但它说创建日期在截止日期之前,反之亦然。

任何想法为什么?约会的东西一直是我的致命弱点。每个代码块都用于自定义控件的加载属性。如果文档是在某个日期之前或之后创建的,我的最终目标是显示 1 个自定义控件或另一个。

从控制台打印如下,谢谢:

HTTP JVM: ONE: Created: 26-02-2020
HTTP JVM: ONE: Cutoff: 22-04-2002
HTTP JVM: 1.2  created before cutoff return false
HTTP JVM: TWO: Created: 26-02-2020
HTTP JVM: TWO: Cutoff: 22-04-2002
HTTP JVM: 2.1  created after cutoff return true

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

    问题是您正在比较文本字符串,而不是日期。因此,“22....”按字母顺序早于“26....”。要进行比较,您可以将字段值作为 Java 日期获取并使用 .before()。此答案涵盖从字段 Set a Java date Object from a Notes DateTime Object 获取 Java 日期。或者,为 dtCutOff 创建一个 Domino DateTime 并使用 Domino DateTime 的 timeDifferenceDouble() 方法。

    【讨论】:

    • 感谢 Paul,我会看看,我认为通过使用 new Date() 创建 2 个日期对象;这意味着我可以简单地使用比较运算符进行比较,因为它们将被视为日期对象,但我猜不是!
    • 当我尝试导入 lotus.domino.DateTime;在我的 SSJS 代码窗口中,我收到错误:“在第 1 行第 13 列遇到”,期待以下之一:“我是否需要通过单击 JAR 文件并使用“构建路径/添加”从包资源管理器视图中引用一个包构建路径?如果是,哪个 JAR?还是我完全错了?不幸的是,当涉及到 JAVA 时,完全是新手。谢谢
    • import.... 是 Java 语法。对于 SSJS,您需要将变量转换为相关的类名,并且类名被设计为更类似于 LotusScript。所以: var dtCreated:lotus.domino.NotesDateTime = document1.getItemValueDate("CreatedDate"); var dtCreatedJava:java.util.Date = dtCreated.toJavaDate();这里可能有一些小错误,我已经很久没有用 SSJS 编码了,而且我手头没有 Domino Designer。链接的问题提供了从 Domino DateTime 获取 Java 日期的方法调用。
    • 更有意义,谢谢!不过,当我把它变成 javadate 时似乎失败了。 dt.toJavaDate();它打印 N1 但从不打印 N2。我已经仔细检查了语法是否正确。 var dt:NotesDateTime = document1.getItemValueDate("CreatedDate");打印(“N1”); var jdt:Date = dt.toJavaDate();打印(“N2”);想我就试试 NotesDateTime 的 timeDifferenceDouble() 方法
    • 现在它在打印“5”之前失败了。老实说,我不知道为什么我在日期比较方面如此挣扎?!?!打印(“1”); var dtCutoff = 新日期(2002, 03, 22, 00, 30); print ("2 Cutoff:" + dtCutoff); var dtCutoff2:NotesDateTime = dtCutoff; print ("3 截止 2:" + dtCutoff2); var dtCreated:NotesDateTime = document1.getItemValueDate("CreatedDate"); print ("4 创建:" + dtCreated); var days:int = dtCutoff2.timeDifferenceDouble(dtCreated) / 86400; // 一天 86400 秒 print ("5"); print("此文档创建于 " + Math.floor(days) + " days ago.");
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2023-03-27
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    相关资源
    最近更新 更多