2010-06-10 104 views

Trả lời

5

Tìm thấy một trang web hữu ích: http://www.rgagnon.com/javadetails/java-0506.html

này nên làm như lừa:

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; là một lỗi, thay đổi nó thành ja = (int) julian; – RealHowTo

0

Bạn có thực sự có nghĩa là một ngày Julian, như nhà thiên văn học sử dụng không? Ngày tháng, được xác định là năm (bốn chữ số) và ngày trong năm đó (3 chữ số), đôi khi được gọi sai ngày 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); 
} 

Điều này sẽ cho bạn ngày giờ 00:00 giờ địa phương; thay vào đó, bạn có thể muốn đặt múi giờ trên lịch thành GMT, tùy thuộc vào ứng dụng.

0

Tôi thấy có đủ câu trả lời đã được cung cấp. Nhưng bất kỳ câu hỏi liên quan đến lịch nào chỉ được trả lời một nửa mà không đề cập đến joda-time ;-). Here là cách đơn giản đó là với thư viện này

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

cách đơn giản là ở đây và điều này sẽ trở lại xấp xỉ 100% thông tin chính xác.

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ải xuống Swiss Ephemeris library và tận hưởng mã hóa !!!

1

Bắt đầu với Java 8, điều này trở thành một lớp lót để có được những LocalDate:

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

đâu julianDay là số 7 chữ số của bạn.

Các vấn đề liên quan