2010-06-10 261 views

回答

5

找到一个有用的网站:http://www.rgagnon.com/javadetails/java-0506.html

这应该做的伎俩:

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)injulian;是一个错误,将其更改为ja =(int)julian; – RealHowTo 2010-08-12 21:22:17

0

你真的是一个Julian日期,像天文学家使用?有序日期被指定为一年(四位数字)和该年的一天(三位数字),有时被错误地称为儒略日期。

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); 
} 

这会给你在当地时间00:00的日期;您可能希望将日历上的时区设置为GMT,具体取决于应用程序。

0

我看到已经提供了足够的答案。但任何与日历相关的问题只有一半的答案没有提及joda-time ;-)。 Here是多么简单的与此库

// 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

简单的方法是在这里,这将返回约100%准确的信息。

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; 
    } 

下载Swiss Ephemeris library并享受编码!

1

与Java 8开始,这将成为一个班轮得到LocalDate

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

哪里julianDay是您的7位数字。