2013-05-21 2 views
0

안녕하세요 저는 임신 기간에 남아 얼마나 많은 일 계산하기 위해 노력하고 임신 알고리즘을 계산하지만 난 내 알고리즘자바가

public int getDaysPregnantRemainder_new() { 
    GregorianCalendar calendar = new GregorianCalendar(); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 
    long diffDays = 280 - ((getDueDate().getTime() - calendar.getTime() 
    .getTime())/(24 * 60 * 60 * 1000)); 
    return (int) Math.abs((diffDays) % 7); 
    } 

내가 280 일 기간의 해제를 근거로하고 잘못된 생각, getDueDate() 인 Date 객체 및 getTime()은 밀리 초 유닉스 시간을 반환합니다.

실제로보고 된 수치는 때로는 하나 씩 떨어져서 내 알고리즘이 잘못되었거나 밀리 초 시간이 점점 더 멀어지고 있다고 생각하기 시작합니다. 또는 밀리 초 시간이 충분히 정확하지 않거나 그레고리 안 캘린더 함수가 이상하게 반올림합니다. ... 바보를 내 아내의 pregency를 추적하는 동안 내가 사용하는 일을 잘 모르겠어요 모두

모두는, 어떤 통찰력 내가 알고리즘 모르는

+3

[Joda-Time] (http://joda-time.sourceforge.net/) – MadProgrammer

+0

에서 시간대 부분이 12 시간 이상인 경우 한 번씩 꺼져 있습니다. .... 시간을 벗으십시오. 날짜의 일부 ... –

+0

@MitchWheat 어떻게? – CQM

답변

5

감사하지만, 이것은 (기본적으로) .. 자신을 저장.

Joda-Time

public class TestDueDate { 

    public static final int WEEKS_IN_PREGNANCY = 40; 
    public static final int DAYS_IN_PREGNANCY = WEEKS_IN_PREGNANCY * 7; 

    public static void main(String[] args) { 

     DateTime dueDate = new DateTime(); 
     dueDate = dueDate.plusDays(DAYS_IN_PREGNANCY); 

     System.out.println("dueDate = " + dueDate); 

     DateTime today = DateTime.now(); 

     Days d = Days.daysBetween(today, dueDate); 

     int daysRemaining = d.getDays(); 

     int daysIn = DAYS_IN_PREGNANCY - daysRemaining; 

     int weekValue = daysIn/7; 
     int weekPart = daysIn % 7; 

     String week = weekValue + "." + weekPart; 

     System.out.println("Days remaining = " + daysRemaining); 
     System.out.println("Days In = " + daysIn); 
     System.out.println("Week = " + week); 

    } 
} 

이 출력됩니다의 작업을 "추측"얻을 보류 많은 ...

dueDate = 2014-02-25T14:14:31.159+11:00 
Days remaining = 279 
Days In = 1 
Week = 0.1 
+0

joda-time은 트릭을 수행했습니다 – CQM

+0

원래 접근 방식의 주요 문제점은 윤년과 초를 뛰어 넘는 것, 특정 세기 경계를 넘어서는 이상한 문제를 고려하지 않는다는 것입니다. – MadProgrammer