Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
如何比较Java8中日期对象之间的时间?_Java_Date - Fatal编程技术网

如何比较Java8中日期对象之间的时间?

如何比较Java8中日期对象之间的时间?,java,date,Java,Date,给定两个包含小时和分钟的Date对象,我如何优雅地找出其中哪一个是一天中最早的时间 例如,如果date1是2018-01-01在09:00,而date2是2018-01-02在08:00,则根据本规范,date2

给定两个包含小时和分钟的
Date
对象,我如何优雅地找出其中哪一个是一天中最早的时间

例如,如果
date1
2018-01-01
09:00
,而
date2
2018-01-02
08:00
,则根据本规范,
date2
编辑2:

//just a sample. base on your case, set the date you have to here.
        Date date1 = Calendar.getInstance().getTime(); 
        Date date2 = Calendar.getInstance().getTime();

        LocalDateTime lcdate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        LocalDateTime lcdate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();


        int date1Hour = lcdate1.getHour();
        int date1Minute = lcdate1.getMinute();

        int date2Hour = lcdate2.getHour();
        int date2Minute = lcdate2.getMinute();
详情如下:


希望对您有所帮助。

如果您之前转换了
日期
,您可以使用
本地时间
比较方法

像这样转换(位于):

比较如下:

time1.compareTo(time2);
public static int compareTimeOfDates(Date date1, Date date2) {
    return convertToLocalTimeViaInstant(date1).compareTo(convertToLocalTimeViaInstant(date2));
}

如果你想使用一种方法,你可以这样使用转换:

time1.compareTo(time2);
public static int compareTimeOfDates(Date date1, Date date2) {
    return convertToLocalTimeViaInstant(date1).compareTo(convertToLocalTimeViaInstant(date2));
}
int comparetimeof日期(日期a、日期b){
LocalDateTime localA=a.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
int hourA=localA.getHour();
int minuteA=localA.getMinute();
LocalDateTime localB=date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
int hourB=localB.getHour();
int minuteB=localB.getMinute();
if(hourA==hourB&&minuteA==minuteB){
返回0;
}
if(hour1
您可以尝试执行以下操作:

boolean compareTime(Date date1, Date date2) {
    DateFormat df = new SimpleDateFormat("HHmm");
    int timeDate1 = Integer.valueOf(df.format(date1));
    int timeDate2 = Integer.valueOf(df.format(date2));
    return timeDate1 >= timeDate2;
}


请尽量避免使用遗留的
java.util.Date
类。您应该查看
java.time
包,选择最适合您的用例的类。
Date
不包含任何小时或分钟。它只包含一个
long
值,即自1970年1月1日00:00:00 GMT以来的毫秒数。不幸的是,我使用的API返回一个
java.util.Date
,我无法更改它。肯定会有一些转变发生吗?或者一种保持时间的方法,但将两者的年/月/日重置为相同的值,然后在
之前使用
?可惜这个问题被否决了,因为很难在网上找到答案。@Salvatoreivine将
日期
转换为
即时
,将
Instant
从UTC调整到时区以获得
ZonedDateTime
,从
ZonedDateTime
提取
LocalTime
,并比较
LocalTime
对象,这些都是堆栈溢出中已经讨论过很多次的主题。谢谢,但这缺少一个重要的部分,如何从原始日期中提取小时和分钟@SalvatoreiOven只需编辑即可获得小时和分钟。@KennyTaiHuynh是的,但这些值是硬编码的,不是从原始日期中提取的。
@DavidConrad:好的,只需执行转换和使用LocalDateTime的步骤(如Java 8所支持的).
LocalDateTime
是错误的类,因为它不能表示一个时刻,缺少时区或与UTC的偏移量。丢弃有价值的区域/偏移量信息无助于解决此问题。@SalvatoreIovene我认为这并没有遗漏要点。它将日期对象转换为可以比较的LocalTime对象。唯一缺少的一点是,生成的LocalTime对象可能具有非零秒或纳秒,但这不重要。在您的回答中,您可以完全以相同的方式进行转换。如果直接转换为LocalTime,则可以直接使用此类的compareToMethod。@SalvatoreiOven如果愿意,可以调用LocalTime对象上的getHour()和getMinute()访问器并进行比较。结果应该是相同的。如果您希望从比较中排除这些对象,则可以在比较之前对两个
LocalTime
对象执行
truncateTo(ChronoUnit.MINUTES)
秒(0)。如果您只想
LocalTime
,则没有理由使用
LocalDateTime
,非常麻烦的旧日期时间类,如,和
java.text.simpleDataFormat
,现在被内置在Java8和更高版本中的类所取代。请参阅。@Basil Bourque-topicstarter在其中一条评论中提到,java.util.Date是从第三方API返回的,他无法更改。请使用添加到旧类的新方法进行转换:然后调用
Instant::atZone
和调用
ZonedDateTime::toLocalTime