Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较java.sql.timestamp值_Java_Scala_Apache Spark_Apache Spark Sql_Timestamp - Fatal编程技术网

比较java.sql.timestamp值

比较java.sql.timestamp值,java,scala,apache-spark,apache-spark-sql,timestamp,Java,Scala,Apache Spark,Apache Spark Sql,Timestamp,对于Timestamp值,如何比较=,因为我们可以使用现有的 myTs.before(someTs) 但这会在内部检查,如果它不检查相等性,则可以使用not of after。因此: !myTs.after(someTs) 或者,您可以获取时间戳的时间并进行比较 myTs.getTime() >= someTs.getTime() Timestamp类的方法返回: 如果此时间戳对象等于给定的时间戳,则整数值为0 如果此时间戳对象在 给定论点 ts1.compareTo(ts2)

对于
Timestamp
值,如何比较=,因为我们可以使用现有的

myTs.before(someTs)

但这会在内部检查
,如果它不检查相等性,则可以使用not of after。因此:

!myTs.after(someTs)
或者,您可以获取时间戳的时间并进行比较

myTs.getTime() >= someTs.getTime()
Timestamp类的方法返回:

  • 如果此时间戳对象等于给定的时间戳,则整数值为0

  • 如果此时间戳对象在 给定论点

    ts1.compareTo(ts2) >= 0 
    
  • 如果此时间戳对象为空,则值大于0 在给定的论点之后

    ts1.compareTo(ts2) >= 0 
    

您可以将求反运算符(
)与
.before
.before
一起使用,如下所示:

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2021, 0, 10);// 10-Jan-2021
        Date datePast = calendar.getTime();
        Timestamp tsPast = new Timestamp(datePast.getTime());

        Date dateNow = new Date();
        Timestamp tsNow = new Timestamp(dateNow.getTime());

        // Check <=
        if (!tsNow.after(tsPast)) {
            System.out.println("Now or before");
        } else {
            System.out.println("After");
        }

        // Check >=
        if (!tsNow.before(tsPast)) {
            System.out.println("Now or after");
        } else {
            System.out.println("Before");
        }
    }
}
java.util
的日期时间API及其格式化API
SimpleDataFormat
已经过时,并且容易出错。建议完全停止使用它们,并切换到。由于
java.sql.Timestamp
扩展了
java.util.Date
,因此它会继承相同的问题。无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7

您可以使用切换到现代日期时间API。一旦您拥有了
Instant
,您就可以将其转换为其他
java.time
类型

演示:

After
Now or after
import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2021, 0, 10);// 10-Jan-2021
        Date datePast = calendar.getTime();
        Timestamp tsPast = new Timestamp(datePast.getTime());
        ZonedDateTime zdtPast = tsPast.toInstant().atZone(ZoneId.of("Europe/London"));

        Date dateNow = new Date();
        Timestamp tsNow = new Timestamp(dateNow.getTime());
        ZonedDateTime zdtNow = tsNow.toInstant().atZone(ZoneId.of("Europe/London"));

        // Check <=
        if (!zdtNow.isAfter(zdtPast.minusMinutes(5))) {
            System.out.println("Now or before");
        } else {
            System.out.println("After");
        }

        // Check >=
        if (!zdtNow.isBefore(zdtPast)) {
            System.out.println("Now or after");
        } else {
            System.out.println("Before");
        }
    }
}
After
Now or after
重要的一点是: 两个时间戳可以相差(即,可以在之前或之后),甚至相差几分之一秒。但是,对于大多数实际场景,这并不是我们想要的,例如,业务需求可以声明,如果过去日期时间小于当前日期时间的5分钟,则应以这种或那种方式进行处理。现代日期-时间API使添加/减去时间单位变得非常容易,例如,您可以执行以下操作:

if (!zdtNow.isAfter(zdtPast.minusMinutes(5))) {
    //...
} else {
    //...
}

了解有关现代日期时间API的更多信息getTime()是否返回seconds@supernatural,你说得不对。getTime方法返回,自1970年1月1日00:00:00 GMT以来的毫秒数。您可以检查tihs metod的javadoc。好的,只需运行msTs.getTime()/1000,我们就可以在秒数内得到结果,没错@Superfurali建议您不要使用
时间戳
。那门课设计得很糟糕,而且早已过时。而是使用来自的
Instant
from。有一纳秒-十亿分之一秒-其中