Алгоритм вычисления беременности Java

Привет я пытаюсь подсчитать, сколько дней осталось в сроке беременности, но я думаю, что мой алгоритм неверен

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() возвращает миллисекундное время Unix

В некоторые дни реального времени число, о котором сообщают, иногда отклоняется на единицу, и я начинаю думать, что мой алгоритм просто неверен, или миллисекунда постепенно становится все дальше и дальше, или миллисекунда не достаточно точна, или григорианская функция календаря обходится странно.

В целом, я не уверен, любое понимание приветствуется

1 ответ

Решение

Я не знаю о вашем алгоритме, но этот (в основном) тот, который я использовал, отслеживая срочность моей жены... ботаники...

Сэкономьте себе массу " догадок " и получите 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
Другие вопросы по тегам