如何比较两个不同的时间戳并找到最新的

时间:2015-08-06 07:02:52

标签: java datetime datetime-format

我有两个不同的时间戳值作为String。我需要找到哪一个是最新的。它的格式为[YYYYMMDDHHMMSS]

时间戳是:

20150804030251
20150804040544

有没有简单的方法可以使用Java 8获取最新信息?

5 个答案:

答案 0 :(得分:3)

您可以在java 8中创建本地日期对象,如下所示

BASE_PATH

然后使用LocalDateTime dt = LocalDateTime.parse("20150804030251", DateTimeFormatter.ofPattern("YYYYMMDDHHMMSS") LocalDateTime dt2 = LocalDateTime.parse("20150804030251", DateTimeFormatter.ofPattern("YYYYMMDDHHMMSS")

进行比较

答案 1 :(得分:3)

您甚至不必解析这些字符串。只需使用compareTo():

function fullLog(obj) 
{
    console.log(JSON.stringify(obj, null, 2));
}

More info

答案 2 :(得分:1)

你仍然可以试试这个。这里不使用Java 8

中的任何特殊功能
String timeStamp1 = "20150804030251";
String timeStamp2 = "20150804040544";
Date date1=new Date(Long.parseLong(timeStamp1));
Date date2=new Date(Long.parseLong(timeStamp2));
if(date1.after(date2)){
  System.out.println("latest "+date1);
}else {
  System.out.println("latest "+date2);
}

答案 3 :(得分:1)

不幸的是,现有的答案都不是正确的。我们先跟他们讨论一下这个问题:

  • accepted answer 的作用纯属巧合。它碰巧工作只是因为值按时间单位(年、月、日、小时、分钟、秒)的递减顺序排列。如果他们的位置发生变化,它将失败,例如MMyyyy...。这种方法的另一个严重问题是它无法验证错误的值,例如15 位而不是 14 位。
  • This 与接受的答案有类似的问题。它不是数值,而是比较 ASCII 值,因此可能会因与已接受答案所述的相同原因而失败。
  • This 是惯用的方式,但它是错误的,因为它使用 Y(指定 week-based-year)而不是 {{1} }(指定 year-of-era)和 y(指定 day-of-year)而不是 D(指定 < em>每月的第几天)。实际上,使用 d 而不是 urecommended。检查documentation页面 了解有关这些符号的更多信息。
  • This 显然是错误的。 Date(long date) 应该用编号初始化对象。自 y 以来的毫秒数。

到现在为止,为了完整起见,您一定已经想出了我在下面发布的解决方案:

1970-01-01T00:00:00Z

输出:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String strDateTime1 = "20150804030251";
        String strDateTime2 = "20150804040544";

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuMMddHHmmss");

        LocalDateTime ldt1 = LocalDateTime.parse(strDateTime1, dtf);
        LocalDateTime ldt2 = LocalDateTime.parse(strDateTime2, dtf);

        LocalDateTime latest = ldt1.isAfter(ldt2) ? ldt1 : ldt2;

        System.out.println(latest);
    }
}

modern date-time API 中了解有关 Trail: Date Time* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 4 :(得分:0)

是的,这些时间戳的形成方式很容易比较。

if ( Long.parseLong(timesteamp1) < Long.parseLong(timestamp2) ) {
  //timestamp2 is later than timestamp1
}

这是可能的,因为最有意义的部分,即年份,是整数中最有意义的部分,最左边的部分;其余部分从左到右依次递减;并且每个部分使用固定数量的数字,例如月02而不是第2个月。否则这种简单的方法是不可能的。

你也可以用词法来比较它们。在此格式的特定情况下,先前的代码等同于:

if ( timestamp1.compareTo(timestamp2) < 0 ) {
  // timestamp2 is later than timestamp 1
}