繁体   English   中英

比较System.currentTimeMillis()

[英]Compare System.currentTimeMillis()

我想使用System.currentTimeMillis()比较两个不同的时间戳。

基本上,我想检查特定日期的时间戳是否在3小时范围内。

这个怎么做?

考虑到您有time1time2 ,其中time1 <= time2可以执行以下操作:

if (time1 >= time2-(60*60*3*1000)) {
   // interval is up to 3 hours
} else {
   // interval is more than 3 hours
}

使用“ Instant获取纪元中的时间,并将其转换为LocalDateTime以获取有关日期的信息,并检查第一时间加上3小时是否小于第二时间:

long millis1 = System.currentTimeMillis();
...
long millis2 = System.currentTimeMillis();

Instant instant1 = Instant.EPOCH.plusMillis(millis1);
Instant instant2 = Instant.EPOCH.plusMillis(millis2);

LocalDateTime t1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault());
LocalDateTime t2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault());

System.out.println("same day: " + (t1.getDayOfYear() == t2.getDayOfYear()));
System.out.println("t1+3h >= t2: " + (t1.plusHours(3).compareTo(t2) >= 0));

这是一个示例程序,可能会帮助您。 问题的关键在于方法“ findIfDatesWithinThreeHours”,该方法有助于确定两个实例是否相隔三个小时。

package com.inrvu.adapter;

import java.util.Calendar;
import java.util.Date;


public class Tester {

public static void main(String[] args) {
    Date[] dates = getTwoDatesThreeHoursApart();
    System.out.println(String.format("%b", findIfDatesWithinThreeHours(dates[0],dates[1])));

    dates = getTwoDatesWithinThreeHours();
    System.out.println(String.format("%b", findIfDatesWithinThreeHours(dates[0],dates[1])));
}

public static Date[] getTwoDatesThreeHoursApart()
{
    Calendar calendar = Calendar.getInstance();
    Date date1 = calendar.getTime();
    calendar.add(Calendar.HOUR,4);
    Date date2 = calendar.getTime();
    return new Date[]{date1,date2};
}

public static Date[] getTwoDatesWithinThreeHours()
{
    Calendar calendar = Calendar.getInstance();
    Date date1 = calendar.getTime();
    calendar.add(Calendar.HOUR,3);
    Date date2 = calendar.getTime();
    return new Date[]{date1,date2};
}

public static boolean findIfDatesWithinThreeHours(Date date1, Date date2) {
    // here the time of a single hour is defined as 60*60*1000
    System.out.println(date1);
    System.out.println(date2);
    return Math.abs(date1.getTime()-date2.getTime()) <= 3*60*60*1000;

}
}

您的问题含糊。 这可能会让您指出正确的方向。

如果用“时间戳”来表示自1970年UTC以来的毫秒数,请构造一个Instant 此类表示UTC时间轴上的时刻,分辨率为纳秒(小于毫秒)。

Instant instant = Instant.ofEpochMilli( millis );

获取当前时刻。

Instant now = Instant.now();

计算三个小时。

Instant in3Hours = now.plus( 3 , ChronoUnit.HOURS );

查看您的时间是否介于现在和三个小时之后。

Boolean contained = ( ( ! instant.isBefore( now ) ) && instant.isBefore( in3Hours ) );

如果您想比较一下瞬间以查看经过的时间是否少于3小时,请使用Duration 此类表示以秒和纳秒为单位的时间跨度。

Instant earlierInstant = … ;
Instant laterInstant = … ;
Duration duration = Duration.between( earlierInstant , laterInstant );
if ( duration.isNegative() ) { 
    … handle error of unexpected data inputs where the second instant is *before* the first instant.
}
… else …
Boolean elapsedUnderThreeHours = ( duration.compareTo( Duration.ofHours( 3 ) ) == -1 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM