2014-02-03 3 views
1

Если я выполнить это утверждение с помощью Joda-Time:Java Joda-Time DateTime Как создать Дата с даты юлианского

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

Он печатает эту дату:

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

То, что я пытаюсь create - это точная дата, но все, что у меня есть, - это формат даты 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 

в

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

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

ответ

0

Если я вас понимаю, то, что вы на самом деле хотите, - 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 

См here for Julian Day calendar from Nasa

+0

@J Стивен Перри , Спасибо за вашу помощь. Позвольте мне указать еще пару вещей. То, что мне в конечном итоге нужно, - это время «posix» от 12/25/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. Это немного разъясняет? – Lani1234

+0

Думаю, я понимаю, что вам нужно сейчас. Взгляните и посмотрите, дает ли этот код желаемый результат. Я должен был читать ваш пост более четко. Вам нужно смещение часового пояса в решении, поэтому миллины имеют правильное значение. Дайте мне знать, если это работает (и не забудьте принять, если вам это нравится! :)) –

+0

@J Стивен Перри Огромное вам спасибо! Это именно то, что я искал. Я даже не уверен, что lcd.minusDays (1) .hourOfDay(). WithMaximumValue() делает, но он работает! Я подключу его к своей программе, и, надеюсь, он будет работать так же хорошо для других юлианских дат. Еще раз спасибо. – Lani1234

Смежные вопросы