Java Joda-Time DateTime Как создать дату из даты по юлианскому календарю

Если я выполню этот оператор, используя Joda-Time:

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

Он распечатывает эту дату:

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

Я пытаюсь создать эту точную дату, но все, что у меня есть, это формат даты по юлианскому календарю 13359 в часовом поясе EST. Я пробовал добавить «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

to

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

У кого-нибудь есть идеи? Я потратил недели на это!


person Lani1234    schedule 03.02.2014    source источник


Ответы (1)


Если я вас понимаю, то, что вы на самом деле хотите, это 11 вечера за день до даты, которая у вас на самом деле есть. Примечание. 359-й день невисокосного года (2013 г.) — 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

календарь юлианских дней от НАСА

person J Steven Perry    schedule 03.02.2014
comment
@J Стивен Перри, спасибо за помощь. Позвольте мне уточнить еще пару вещей. Что мне в конечном итоге нужно, так это время posix 25.12.2013 EST. Мне сказали, что я ищу номер 1387947600 (что по существу 2013-12-24T23:00:00.000-06:00).getMillis()/1000). У меня есть 13359 в EST. Мне нужно добраться до 2013-12-24T23:00:00.000-06:00, чтобы, когда я использую метод getMillis() и затем делю на 1000, я получал результат 1387947600. Это немного проясняет? - person Lani1234; 04.02.2014
comment
Кажется, я понимаю, что тебе сейчас нужно. Взгляните и посмотрите, дает ли этот код желаемый результат. Я должен был прочитать ваш пост более четко. Вам нужно смещение часового пояса в решении, поэтому милли имеют правильное значение. Дайте мне знать, если это работает (и не забудьте принять, если вам это нравится! :)) - person J Steven Perry; 04.02.2014
comment
@J Стивен Перри Большое спасибо! Это именно то, что я искал. Я даже не совсем уверен, что делает lcd.minusDays(1).hourOfDay().withMaximumValue(), но это работает! Я включу его в свою программу, и, надеюсь, он будет работать так же хорошо для других юлианских дат. Еще раз спасибо. - person Lani1234; 04.02.2014