Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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
比较java中表示时间戳的UTC的两种不同字符串格式_Java_Datetime - Fatal编程技术网

比较java中表示时间戳的UTC的两种不同字符串格式

比较java中表示时间戳的UTC的两种不同字符串格式,java,datetime,Java,Datetime,我有一个字符串“21-SEP-15 02.48.48.000000000 AM UTC”,表示UTC时间戳,我有一个格式字符串“2015-10-08T20:13:21.3Z”,表示另一个时间戳。如果它们相等或不相等,如何比较它们?第二种格式使用ISO约定,因此可以轻松解析 第一个解析起来有点复杂,特别是因为月份是大写的 一种方法是: String ts1 = "21-SEP-15 02.48.48.000000000 AM UTC"; String ts2 = "2015-10-08T20:13

我有一个字符串“21-SEP-15 02.48.48.000000000 AM UTC”,表示UTC时间戳,我有一个格式字符串“2015-10-08T20:13:21.3Z”,表示另一个时间戳。如果它们相等或不相等,如何比较它们?

第二种格式使用ISO约定,因此可以轻松解析

第一个解析起来有点复杂,特别是因为月份是大写的

一种方法是:

String ts1 = "21-SEP-15 02.48.48.000000000 AM UTC";
String ts2 = "2015-10-08T20:13:21.3Z";

DateTimeFormatter fmt1 = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a VV")
        .toFormatter(Locale.ENGLISH);

Instant d1 = ZonedDateTime.parse(ts1, fmt1).toInstant();
Instant d2 = Instant.parse(ts2);

然后,您可以使用
d1比较这两个瞬间。equals(d2)

第二种格式使用ISO约定,因此可以轻松解析

第一个解析起来有点复杂,特别是因为月份是大写的

一种方法是:

String ts1 = "21-SEP-15 02.48.48.000000000 AM UTC";
String ts2 = "2015-10-08T20:13:21.3Z";

DateTimeFormatter fmt1 = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a VV")
        .toFormatter(Locale.ENGLISH);

Instant d1 = ZonedDateTime.parse(ts1, fmt1).toInstant();
Instant d2 = Instant.parse(ts2);

然后可以将这两个实例与
d1进行比较。equals(d2)

1)将
字符串
解析为
LocalDateTime
。2) 正如Boris所说,你不能直接将它们作为
字符串进行比较,从而得到你想要的时间顺序。您需要首先将
字符串
转换为临时对象。Java8中的Java日期时间API非常适合这种情况。一旦将字符串作为时态对象,例如
LocalDateTime
实例,就可以使用
isEqual()
compareTo()
对它们进行比较。由于这些时间已经是UTC时间,您还可以直接比较从
Instant.toEpochMilli()
获取的POSIX时间整数值,以进行时间顺序。@Boristeider您能解释一下我如何使用LocalDateTime来做这件事吗,如何将时间戳的特定格式字符串转换为本地时间。提前感谢。1)将
字符串
解析为
LocalDateTime
。2) 正如Boris所说,你不能直接将它们作为
字符串进行比较,从而得到你想要的时间顺序。您需要首先将
字符串
转换为临时对象。Java8中的Java日期时间API非常适合这种情况。一旦将字符串作为时态对象,例如
LocalDateTime
实例,就可以使用
isEqual()
compareTo()
对它们进行比较。由于这些时间已经是UTC时间,您还可以直接比较从
Instant.toEpochMilli()
获取的POSIX时间整数值,以进行时间顺序。@Boristeider您能解释一下我如何使用LocalDateTime来做这件事吗,如何将时间戳的特定格式字符串转换为本地时间。提前感谢。我目前正在使用Java 7,它不支持DateTimeFormatter。我使用SimpleDateFormat尝试了多种不同的方法,SimpleDateFormat相当于DateTimeFormatter,但失败了。但是,是的,非常感谢您提供上述解决方案。这正是我想做的。我目前使用的是Java 7,它不支持DateTimeFormatter。我使用SimpleDateFormat尝试了多种不同的方法,SimpleDateFormat相当于DateTimeFormatter,但失败了。但是,是的,非常感谢您提供上述解决方案。这正是我想做的。而且不支持即时。