0

我有一个以数字格式到达我的日期值流,我认为它是儒略格式(不确定)。我需要将这些日期与我自己的日期进行比较,因此我需要将“我的”日期转换为该数字格式。对于性能问题,我不能反之亦然。

例子。我的日期是“经典”格式:

"Wed Jan 21 10:21:57 CET 2015"

我需要将其转换为这种数字格式(是 Julian 吗?):

"1421832117"

如何?注意:在朱利安日期中,我还需要时间信息,而不仅仅是日期!

非常感谢。

4

2 回答 2

0

您可以使用您提供的日期格式传递 Arg(输入),下面的方法将以 Millis(您想要的格式)解析它

private void parseDateTime(String input){
    DateTimeZone CET = DateTimeZone.forID("CET");
    DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss 'CET' yyyy").withZone(CET);
    DateTime parsed = dtf.parseDateTime(input);
    Log.d("Millis for classic","" + parsed.getMillis());
}

输出:01-28 20:40:56.787:经典的 D/Millis(22559):1421832117000

于 2015-01-29T12:06:19.990 回答
0

自 1970 年以来的秒数

自 1970 UTC 第一时刻以来,您显然将整秒数误认为是儒略日数。虽然两者都很重要,但它们完全是野兽。

儒略日数是自 BC 4713 年 1 月 1 日起的整数或小数天数,预测儒略历(公元前 4714 年 11 月 24 日,预测公历)。如下所示日期的儒略日数2015-01-2124570431421832117与问题中看到的输入非常不同。

java.time

使用 Java 8 及更高版本中内置的 java.time 框架,我们可以轻松地将您的秒数转换为日期时间对象。请参阅Oracle 教程以了解 java.time。大部分 java.time 功能已在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP进一步适应 Android 。

AnInstant是 UTC 时间线上的一个时刻,分辨率高达纳秒。

Instant now = Instant.now();

我们可以轻松地将您自 1970 UTC 开始以来的秒数Instant转换为对象。

long seconds = 1421832117L; // Count of whole seconds since start of 1970 UTC.
Instant instant = Instant.ofEpochSecond ( seconds );

您可能希望通过某个时区的挂钟时间来查看此信息。避免使用 3-4 个字母的缩写,例如CET这些不是真正的时区,不是标准化的,甚至不是唯一的(!)。正确的时区名称采用continent/region.

ZoneId zoneId = ZoneId.of ( "Europe/Paris" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );

转储到控制台。

System.out.println ( "seconds:" + seconds + " | instant: " + instant + " | zdt: " + zdt );

秒:1421832117 | 瞬间:2015-01-21T09:21:57Z | zdt: 2015-01-21T10:21:57+01:00[欧洲/巴黎]

于 2016-07-09T04:44:00.887 回答