[英]Compare System.currentTimeMillis()
我想使用System.currentTimeMillis()
比较两个不同的时间戳。
基本上,我想检查特定日期的时间戳是否在3小时范围内。
这个怎么做?
考虑到您有time1
和time2
,其中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.