我有两个不同的时间戳值作为String。我需要找到哪一个是最新的。它的格式为[YYYYMMDDHHMMSS]
时间戳是:
20150804030251
20150804040544
有没有简单的方法可以使用Java 8获取最新信息?
答案 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));
}
答案 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)
不幸的是,现有的答案都不是正确的。我们先跟他们讨论一下这个问题:
MMyyyy...
。这种方法的另一个严重问题是它无法验证错误的值,例如15 位而不是 14 位。Y
(指定 week-based-year)而不是 {{1} }(指定 year-of-era)和 y
(指定 day-of-year)而不是 D
(指定 < em>每月的第几天)。实际上,使用 d
而不是 u
是 recommended。检查documentation页面
了解有关这些符号的更多信息。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 desugaring 和 How 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
}