2010-06-10 3 views

Répondre

5

trouvé un site utile: http://www.rgagnon.com/javadetails/java-0506.html

Cela devrait faire l'affaire:

public static int[] fromJulian(double injulian) { 

     int jalpha,ja,jb,jc,jd,je,year,month,day; 
     double julian = julian + HALFSECOND/86400.0; 
     ja = (int) julian; 
     if (ja>= JGREG) {  

     jalpha = (int) (((ja - 1867216) - 0.25)/36524.25); 
     ja = ja + 1 + jalpha - jalpha/4; 
     } 
    jb = ja + 1524; 
    jc = (int) (6680.0 + ((jb - 2439870) - 122.1)/365.25); 
    jd = 365 * jc + jc/4; 
    je = (int) ((jb - jd)/30.6001); 
    day = jb - jd - (int) (30.6001 * je); 
    month = je - 1; 
    if (month > 12) month = month - 12; 
    year = jc - 4715; 
    if (month > 2) year--; 
    if (year <= 0) year--; 

    return new int[] {year, month, day}; 
    } 
+0

ja = (int) injulien; est une erreur, changez-le en ja = (int) julian; – RealHowTo

0

Voulez-vous dire vraiment une date Julian, comme les astronomes utilisent? Les dates ordinales, qui sont spécifiées comme une année (quatre chiffres) et le jour dans cette année (trois chiffres), sont parfois incorrectement appelées dates juliennes.

static String formatOrdinal(int year, int day) { 
    Calendar cal = Calendar.getInstance(); 
    cal.clear(); 
    cal.set(Calendar.YEAR, year); 
    cal.set(Calendar.DAY_OF_YEAR, day); 
    Date date = cal.getTime(); 
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 
    return formatter.format(date); 
} 

Cela vous donnera la date à 00:00 heure locale; vous souhaiterez peut-être définir le fuseau horaire sur les calendriers sur GMT à la place, en fonction de l'application.

0

Je vois qu'il y a suffisamment de réponses déjà fournies. Mais toute question liée au calendrier est seulement une demi-réponse sans mentionner joda-time ;-). Here est combien il est simple avec cette bibliothèque

façon simple
// setup date object for the Battle of Hastings in 1066 
Chronology chrono = JulianChronology.getInstance(); 
DateTime dt = new DateTime(1066, 10, 14, 10, 0, 0, 0, chrono); 
3

est ici et ce sera de retour à 100% des informations précises.

String getDobInfo(double doubleString){ 
     SweDate sweDate = new SweDate(doubleString); 
     int year = sweDate.getYear(); 
     int month = sweDate.getMonth(); 
     int day = sweDate.getDay(); 
     // getting hour,minute and sec from julian date 
     int hour = (int) Math.floor(sweDate.getHour()); 
     int min = (int) Math 
       .round((sweDate.getHour() - Math.floor(hour)) * 60.0); 
     int sec = (int) (((sweDate.getHour() - Math.floor(hour)) * 60.0 - Math 
       .floor(min)) * 60.0); 
     return "DOB:(DD:MM:YY) "+day+":"+month+":"+year+" TOB:(HH:MM:SS) "+hour+":"+min+":"+sec; 
    } 

téléchargez le Swiss Ephemeris library et profitez du codage !!!

1

A partir de Java 8, cela devient une seule ligne pour obtenir le LocalDate:

LocalDate.MIN.with(JulianFields.JULIAN_DAY, julianDay) 
.format(DateTimeFormatter.ofPattern("MM/dd/yyyy")); 

julianDay est votre numéro à 7 chiffres.