Вопрос

Я видел «решение» в http://www.rgagnon.com/javadetails/java-0506.html., но это не работает правильно. Например, вчерашний день (8 июня) должно было быть 159 лет, но он сказал, что это было 245.

Итак, у кого-то есть решение в Java для получения трехзначного Джулиана Джулиана Джулианской даты (не Джулиана - мне нужен день в этом году)?

Спасибо! отметка

Это было полезно?

Решение

Если все, что вы хотите, это день год, почему дон не просто использовать григорианкалендари DAY_OF_YEAR поле?

import java.util.GregorianCalendar;
public class CalTest {
    public static void main(String[] argv) {
        GregorianCalendar gc = new GregorianCalendar();
        gc.set(GregorianCalendar.DAY_OF_MONTH, 8);
        gc.set(GregorianCalendar.MONTH, GregorianCalendar.JUNE);
        gc.set(GregorianCalendar.YEAR, 2010);
        System.out.println(gc.get(GregorianCalendar.DAY_OF_YEAR));
}

}

В качестве альтернативы вы можете рассчитать разницу между сегодняшней Джулианской датой и чем 1 января этого года. Но обязательно добавьте 1 к результату, начиная с 1 января не зрительный день года:

int[] now = {2010, 6, 8};
int[] janFirst = {2010, 1, 1};
double dayOfYear = toJulian(now) - toJulian(janFirst) + 1
System.out.println(Double.valueOf(dayOfYear).intValue());

Другие советы

DateFormat d = new SimpleDateFormat("D");
System.out.println(d.format(date));
import java.util.Calendar;
// ...
final int julianDay = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);

Обратите внимание, что это не учитывает сделку «Начало в полдень», утверждаемый этим странным сайтом, который вы ссылались. Это может быть исправлено, просто проверяя время, конечно.

Если мы получим двойную Джулианскую дату, такой как Chordiant Recial Manager

http://java.ithoolox.com/groups/technaliance-functional/java-l/java-function-to-convert-julian-date-to-calendar-date-1947446.

Следующее работает, но вторым не позаботится оКак я могу конвертировать между датой Java и номером Джулиана?

Государственная статическая струна Juliandate (String Juliandatestr) {

    try{
        // Calcul date calendrier Gr?gorien ? partir du jour Julien ?ph?m?ride 
        // Tous les calculs sont issus du livre de Jean MEEUS "Calcul astronomique" 
        // Chapitre 3 de la soci?t? astronomique de France 3 rue Beethoven 75016 Paris 
        // Tel 01 42 24 13 74 
        // Valable pour les ann?es n?gatives et positives mais pas pour les jours Juliens n?gatifs
        double jd=Double.parseDouble(julianDateStr);
          double z, f, a, b, c, d, e, m, aux;
            Date date = new Date();
            jd += 0.5;
            z = Math.floor(jd);
            f = jd - z;

            if (z >= 2299161.0) {
              a = Math.floor((z - 1867216.25) / 36524.25);
              a = z + 1 + a - Math.floor(a / 4);
            } else {
              a = z;
            }

            b = a + 1524;
            c = Math.floor((b - 122.1) / 365.25);
            d = Math.floor(365.25 * c);
            e = Math.floor((b - d) / 30.6001);
            aux = b - d - Math.floor(30.6001 * e) + f;
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(date);
            calendar.set(Calendar.DAY_OF_MONTH, (int) aux);

            double hhd= aux-calendar.get(Calendar.DAY_OF_MONTH);                
            aux = ((aux - calendar.get(Calendar.DAY_OF_MONTH)) * 24);




            calendar.set(Calendar.HOUR_OF_DAY, (int) aux);

            calendar.set(Calendar.MINUTE, (int) ((aux - calendar.get(Calendar.HOUR_OF_DAY)) * 60));



         // Calcul secondes 
            double mnd = (24 * hhd) - calendar.get(Calendar.HOUR_OF_DAY);
            double ssd = (60 * mnd) - calendar.get(Calendar.MINUTE); 
            int ss = (int)(60 * ssd);
            calendar.set(Calendar.SECOND,ss);



            if (e < 13.5) {
              m = e - 1;
            } else {
              m = e - 13;
            }
            // Se le resta uno al mes por el manejo de JAVA, donde los meses empiezan en 0.
            calendar.set(Calendar.MONTH, (int) m - 1);
            if (m > 2.5) {
              calendar.set(Calendar.YEAR, (int) (c - 4716));
            } else {
              calendar.set(Calendar.YEAR, (int) (c - 4715));
            }


        SimpleDateFormat sdf=new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        //System.out.println("Appnumber= "+appNumber+" TimeStamp="+timeStamp+" Julian Date="+julianDateStr+" Converted Date="+sdf.format(calendar.getTime()));
        return sdf.format(calendar.getTime());

}catch(Exception e){
    e.printStackTrace();
}
return null;

}  

Я прочитал все сообщения и что-то не очень ясно, я думаю.

User912567 упоминается Джин Миус, и он абсолютно прав

Наиболее точное определение, которое я обнаружил, дается Жан Meeus в его книге «Астрономические алгоритмы» (Действительно ...).

Джулианская дата Дата, выраженные как обычно, с годом, месяц и день.

Джулианский день количество (Настоящее число), считается из года -4712 и "... непрерывное количество дней ..." (и доля дня). А. полезно Шкала времени, используемая для точных астрономических расчетов.

Жан Миус: «Джулианский день не имеет ничего общего с Джулианским календарем» («Астрономические алгоритмы», 2-е издание, с.59)

TL; доктор

LocalDate.now( ZoneId.of( “America/Montreal” ) ).getDayOfYear()

Терминология "Джулиан"

Термин «Джулийский день» иногда используется свободно, чтобы означать ординал день года или Умышленный день, что означает номер от 1 до 365 или 366 (прыжок лет). 1 января 1, 2 января 2, 31 декабря 365 (или 366 в прыжковых годах).

Это свободное (неверное) использование Julian вероятно, исходит от использовать в астрономии и другие области отслеживания даты в качестве непрерывного подсчета дней с до полудня всеобщего времени 1 января 4713 г. до н.э. (на Джулианский календарь). В настоящее время Джулианская дата приближается к двум и полумиллионам, 2,457,576 сегодня.

Java.Time.

Java.Time Framework, встроенная в Java 8, а затем, обеспечивает легкое объект для того, чтобы получить день в году.

То LocalDate Класс представляет собой значение только даты без времени и без часового пояса. Вы можете допросить в течение дня года.

LocalDate localDate = LocalDate.of ( 2010 , Month.JUNE , 8 );
int dayOfYear = localDate.getDayOfYear ();

Дамп до консоли. Результаты показывают, что 8 июня 2010 года действительно день # 159.

System.out.println ( "localDate: " + localDate + " | dayOfYear: " + dayOfYear );

localdate: 2010-06-08 | Dayofyear: 159.

Часовой пояс имеет решающее значение для определения даты. За любой данный момент дата варьируется по всему миру по зоне. Например, несколько минут после полуночи в Париже Франция - это новый день, пока еще «вчера» в Монреал Квебек.

ZoneId z = ZoneId.of( “America/Montreal” );
LocalDate today = LocalDate.now( z );
int dayOfYear = today.getDayOfYear ();

Идущее другое направление, от числа до свидания.

LocalDate ld = Year.of( 2017 ).atDay( 159 ) ;

О Java.Time.

То Java.Time. Рамки встроены в Java 8, а затем. Эти классы вытесняют проблему старого наследие Классы даты времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

То Joda-Time Проект, сейчас в Режим технического обслуживания, советует миграцию к Java.Time. классы.

Чтобы узнать больше, см. Учебник Oracle. Отказ И поиск стека переполнения для многих примеров и пояснений. Спецификация JSR 310..

Вы можете обменять Java.Time. Объекты напрямую с вашей базой данных. Использовать JDBC драйвер совместимый с JDBC 4.2 или позже. Нет необходимости в струнах, нет необходимости в java.sql.* классы.

Где получить классы Java.Time?

  • Java SE 8., Java SE 9., Java SE 10., и позже
    • Встроенный.
    • Часть стандартного Java API с подключенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6. а также Java SE 7.
    • Большая часть функциональности Java.Time возвращается в Java 6 & 7 в Threeten-Backport..
  • Андроид

То Threeten-Extra Проект расширяет Java.Time с дополнительными классами. Этот проект является доказательством для возможных будущих дополнений в Java.Time. Вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter, а также более.

Вы также можете получить «Джулианскую дату» или «порядковый день» таким образом:

import java.util.Calendar;
import java.util.Date;

public class MyClass {

  public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    LocalDate myObj = LocalDate.now();
    System.out.println(myObj);
    System.out.println("Julian Date:" + cal.get(Calendar.DAY_OF_YEAR));

  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top