Java Joda-Time DateTime如何从Julian日期创建日期

时间:2014-02-03 21:27:57

标签: java datetime julian

如果我使用Joda-Time执行此声明:

System.out.println(new DateTime(1387947600*1000L));

打印出这个日期:

2013-12-24T23:00:00.000-06:00

我想要创建的是这个确切的日期,但我所拥有的是EST时区中的Julian日期格式13359。我试过的是在我的朱利安日期附加“20”,给我字符串“2013359”。然后我使用代码:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyDDD");   
DateTime test1 = formatter.parseDateTime(d2);

当我打印出test1时,它给了我:

2013-12-25T00:00:00.000-06:00

如果我使用

将test1转换为UTC时间
DateTime test2 = test1.withZoneRetainFields(DateTimeZone.forTimeZone(TimeZone.getTimeZone("UTC")));

然后打印出test2,我得到:

2013-12-25T00:00:00.000Z

这不是我要找的。我怎么能从

出发
"13359" in EST zone

2013-12-24T23:00:00.000-06:00

有人有任何想法吗?我花了好几个星期!

1 个答案:

答案 0 :(得分:0)

如果我了解你,你真正想要的是你实际拥有日期的前一天晚上11点。注意:非闰年(2013年)的第359天是12月25日。

试试这个:

import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class JulianDateTester {

  public static void main(String[] args) {
    String julianDateString = "13359";

    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyDDD");
    DateTime lcd = formatter.parseDateTime("20" + julianDateString);
    DateTime lcdWeWant = lcd.minusDays(1).hourOfDay().withMaximumValue();

    System.out.println("Input: " + julianDateString + ", formats as '" + lcd.toString());
    System.out.println("The date we want is '" + lcdWeWant.toString() + "'");
    System.out.println("The \"date\" we REALLY want is " + lcdWeWant.getMillis());

  }

}

哪个输出:

Input: 13359, formats as '2013-12-25T00:00:00.000-06:00
The date we want is '2013-12-24T23:00:00.000-06:00'
The "date" we REALLY want is 1387947600000

请参阅here for Julian Day calendar from Nasa