【问题标题】:java calculate pregnancy algorithm [duplicate]java计算怀孕算法[重复]
【发布时间】:2013-05-15 17:54:20
【问题描述】:

您好,我正在计算怀孕期还剩多少天,但我认为我的算法不正确

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 时间

在某些现实世界的日子里,有时报告的数字会相差一,我开始认为我的算法是错误的,或者毫秒时间越来越远,或者毫秒时间不够精确,或者公历函数的循环很奇怪。

总之我不确定,任何见解都值得赞赏

【问题讨论】:

  • 看看Joda-Time
  • 当时间部分超过/低于 12 小时标记时,它可能会减一......剥离日期的时间部分......

标签: java algorithm date epoch


【解决方案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

【讨论】:

  • joda-time 成功了
  • 原始方法的主要问题是它不会考虑闰年和秒以及某些世纪边界上的奇怪问题
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多