Алгоритм вычисления беременности 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