- Android平板电脑(41)
- 自己的工具(52)
- 自己软件开源代码(39)
- 文章存档
- 2016年10月(1)
- 2016年06月(4)
- 2016年05月(12)
- 2016年03月(3)
- 2015年12月(1)
- 2015年08月(2)
- 2015年07月(2)
- 2015年05月(4)
- 2015年04月(4)
- 2015年03月(3)
- 2015年01月(3)
- 2014年12月(15)
- 2014年11月(2)
- 2014年10月(1)
- 2014年08月(1)
- 2014年07月(4)
- 2014年06月(4)
- 2014年05月(1)
- 2014年04月(6)
- 2014年03月(2)
- 2014年02月(1)
- 2014年01月(7)
- 2013年12月(7)
- 2013年11月(12)
- 2013年10月(9)
- 2013年09月(9)
- 2013年08月(12)
- 2013年07月(6)
- 2013年06月(3)
- 2013年05月(3)
- 2013年04月(10)
- 2013年03月(24)
- 2013年02月(5)
- 2013年01月(5)
- 2012年12月(5)
- 2012年11月(2)
- 2012年10月(10)
- 2012年09月(11)
- 2012年08月(9)
- 2012年07月(14)
- 2012年06月(9)
- 2012年05月(3)
- 2012年04月(6)
- 2012年03月(15)
- 2012年02月(4)
- 2012年01月(3)
- 2011年12月(4)
- 2011年11月(1)
- 2011年10月(4)
- 2011年09月(15)
- 2011年08月(17)
- 2011年07月(13)
- 2011年06月(3)
- 2011年05月(6)
- 2011年04月(3)
- 2011年03月(11)
- 2011年02月(4)
- 2011年01月(6)
- 2010年12月(8)
- 2010年11月(5)
- 2010年10月(6)
- 2010年09月(7)
- 2010年08月(11)
- 2010年07月(2)
- 2010年06月(9)
- 2010年05月(12)
- 2010年04月(9)
- 2010年03月(8)
- 2010年02月(7)
- 2010年01月(5)
- 2009年12月(6)
- 2009年11月(5)
- 2009年10月(10)
- 2009年09月(9)
- 2009年03月(8)
- 2009年02月(20)
- 2009年01月(20)
- 2008年12月(35)
- 2008年11月(38)
- 2008年10月(31)
- 2008年09月(22)
- 2008年08月(14)
- 2008年07月(14)
- 2008年06月(38)
- 2008年05月(10)
- 2008年04月(93)
- 2008年03月(148)
- 2008年02月(38)
- 2008年01月(16)
- 2007年12月(23)
- 2007年10月(9)
- 2007年09月(1)
- 2007年08月(2)
- 2007年07月(2)
- 2007年06月(26)
- 2007年05月(5)
###################################################################################################
JAVA 实现预产期计算器

一天,有人问我,大师,怀孕32周是几个月呢?
答:7个月零两个星期,
为什么网上都是说8个月呢,从小就知道 4×8=32,医生也跟我说是7个月零两个星期,这是怎么算出来的。
大师♂罗莊今天就把所有预产期计算器算法说下吧:
如果月经周期不是28天的话,最后结果需要和(28- 月经周期)天数做加减,留给大家去思考了。
- package test;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.GregorianCalendar;
- /**有关预产期计算的算法
- * @author 大师♂罗莊
- *
- */
- public class pregnancyHelp {
- /**
- * @param args
- * @throws ParseException
- */
- public static void main(String[] args) throws ParseException {
- // 请输入您的最后一次来月经的时间
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Date d1 = sdf.parse("2014-2-20");
- Calendar d = Calendar.getInstance();
- d.setTime(d1);
- setValue(d);
- }
- /**
- * @param localCalendar1
- * 末次月经时间
- * @throws ParseException
- */
- private static void setValue(Calendar localCalendar1) throws ParseException {
- // 取今天时间
- Calendar Calendartoday = Calendar.getInstance();
- // 克隆一个保存下
- Calendar Calendarborn = (Calendar) localCalendar1.clone();
- // 取今天和末次月经时间相差多少天
- long daysBetweennumber = daysBetween(localCalendar1.getTime(),
- Calendartoday.getTime());
- // 算出多少周
- int WeekBetweennumber = (int) daysBetweennumber / 7;
- // 零多少天
- long i1 = (daysBetweennumber + 1) % 7;
- // 电脑计算预产期,只需在末次月经第一天加上9个月零1周(280天)即可
- Calendarborn.add(Calendar.DAY_OF_MONTH, 280);
- // 计算预产期距离今天还有几天
- long borndayBetween = -1
- + daysBetween(Calendartoday.getTime(), Calendarborn.getTime());
- // 为输出年月日做准备
- int bornyear = Calendarborn.get(Calendar.YEAR);
- int bornmonth = 1 + Calendarborn.get(Calendar.MONTH);
- // MONTH加1的原因: public static final int MONTH 指示月份的 get 和 set
- // 的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是 JANUARY,它为 0;
- // 最后一个月取决于一年中的月份数。 简单来说,因为这个值的初始值是0,因此我们要用它来表示正确的月份时就需要加1。
- int bornday = Calendarborn.get(Calendar.DAY_OF_MONTH);
- System.out.println("您已经怀孕" + daysBetweennumber + "天");
- String current = (WeekBetweennumber + "周" + i1 + "天");
- System.out.println("怀孕周数" + current);
- getMediMonthSpace(WeekBetweennumber);
- System.out.println("怀孕月数(直接减去法)"
- + getMonthSpace(localCalendar1, Calendartoday) + "个月");
- String born = (borndayBetween + "天");
- System.out.println("距离宝宝出生还有" + born);
- String borndayString = (String.valueOf(bornyear) + "年"
- + String.valueOf(bornmonth) + "月" + String.valueOf(bornday) + "日");
- System.out.println("预产期为" + borndayString);
- Calendarbornmanual(localCalendar1);
- }
- /**
- * 计算方法:从末次月经第一天算起,月份减3,如不够时则加9,日数加7。
- *
- * @param cal
- * 从末次月经
- */
- static void Calendarbornmanual(Calendar cal) {
- Calendar temp = (Calendar) cal.clone();
- int month1 = temp.get(Calendar.MONTH) + 1;
- if (month1 < 3) {
- temp.add(Calendar.MONTH, 9);
- } else {
- temp.add(Calendar.MONTH, -3);
- temp.add(Calendar.YEAR, 1);
- }
- temp.add(Calendar.DAY_OF_MONTH, 7);
- System.out.println("人手工计算的预产期为");
- outprint(temp);
- }
- /**
- * 计算两个日期之间相差的天数 需要用calendar,因为Date返回的永远是UTC时间,也就是时区永远比我们晚8个小时。
- *
- * @param smdate
- * 较小的时间
- * @param bdate
- * 较大的时间
- * @return 相差天数
- * @throws ParseException
- */
- public static long daysBetween(Date smdate, Date bdate)
- throws ParseException {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- smdate = sdf.parse(sdf.format(smdate));
- bdate = sdf.parse(sdf.format(bdate));
- Calendar cal = Calendar.getInstance();
- cal.setTime(smdate);
- long time1 = cal.getTimeInMillis();
- cal.setTime(bdate);
- long time2 = cal.getTimeInMillis();
- long between_days = (time2 - time1) / (1000 * 3600 * 24);
- return between_days;
- }
- static void outprint(Calendar cal) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- // 打印
- System.out.println(dateFormat.format(cal.getTime()));
- }
- /**
- * 有人问我32w+(32周)怀孕几个月
- *
- * @param week
- * 输入周数
- */
- public static void getMediMonthSpace(int week) {
- // 此算法同原昆明某三甲医院产科主任算法一致,所以为什么我的算法和她医生算出来的一致
- int month = week * 7 / 30;// 周数算出月数,可以按28天或者30天算
- int weekleave = week * 7 % 30;// 周数算出剩下的天数
- // 也可以通过/7算出周数,大家自己去补充了
- System.out.print("怀孕月数(计算法)" + month + "个月");
- System.out.println(weekleave + "天");
- }
- /**
- * 算两个日期差几个月,不能用Calendar.MONTH直接相减,否则2012年11月和2013年11月就是0
- *
- * @param scalendar
- * 日期1
- * @param calendar
- * 日期2
- * @return 两个日期差几个月
- */
- public static int getMonthSpace(Calendar scalendar, Calendar calendar) {
- int year1 = calendar.get(Calendar.YEAR);
- int year2 = scalendar.get(Calendar.YEAR);
- int month1 = calendar.get(Calendar.MONTH);
- int month2 = scalendar.get(Calendar.MONTH);
- int count = 0;
- if (year1 == year2 && month1 > month2) {
- count = month1 - month2;
- } else if (year1 == year2 && month1 < month2) {
- count = month2 - month1;
- } else if (year1 > year2 && month1 > month2) {
- count = (year1 - year2) * 12 + (month1 - month2);
- } else if (year1 > year2 && month1 < month2) {
- count = (year1 - year1) * 12 + (month2 - month1);
- } else if (year1 < year2 && month1 > month2) {
- count = (year2 - year1) * 12 + month1 - month2;
- } else if (year1 < year2 && month1 < month2) {
- count = (year2 - year1) * 12 + month2 - month1;
- }
- if (count < 0) {
- count = Math.abs(count);
- }
- return count;
- }
- }
输出
- 您已经怀孕230天
- 怀孕周数32周0天
- 怀孕月数(计算法)7个月14天
- 怀孕月数(直接减去法)8个月
- 距离宝宝出生还有49天
- 预产期为2014年11月27日
- 人手工计算的预产期为
- 2014-11-27