我有一个日期值流,它以数字格式传达给我,我认为它是朱利安格式(不确定)。我需要将这些日期与我自己的日期进行比较,所以我需要转换"我的"日期为该数字格式。 我不能'为表现问题做反之亦然。
实施例。 我的日期是"经典"格式:
"Wed Jan 21 10:21:57 CET 2015"
我需要将它转换为这种数字格式(是Julian吗?):
"1421832117"
如何? 注意:在朱利安日期我还需要时间信息,而不仅仅是日期!
非常感谢。
答案 0 :(得分: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 for classic(22559):1421832117000
答案 1 :(得分:0)
自从1970年世界贸易组织的第一个时刻以来Julian day number,您显然错误地将整秒计数错误。虽然两者都很重要,但这些都是野兽。
朱利安日数是自公元前4713年1月1日proleptic Julian calendar(公元前4714年11月24日,proleptic Gregorian calendar)以来的整数或分数天数。下面显示的日期的Julian日期数2015-01-21
为2457043
。与问题中看到的1421832117
输入非常不同。
使用Java 8及更高版本中内置的java.time框架,我们可以轻松地将您的秒数转换为日期时间对象。请参阅Oracle Tutorial以了解java.time。许多java.time功能已经被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
Instant
是UTC时间轴上的一个时刻,分辨率最高可达纳秒。
Instant now = Instant.now();
从1970年UTC开始,我们可以轻松convert your count of seconds成为Instant
对象。
long seconds = 1421832117L; // Count of whole seconds since start of 1970 UTC.
Instant instant = Instant.ofEpochSecond ( seconds );
您可能希望通过某个时区的wall-clock time查看此内容。避免使用3-4个字母缩写,例如CET
,因为这些不是真正的时区,不是标准化的,甚至不是唯一的(!)。 proper time zone name的格式为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 [欧洲/巴黎]