JAVA 实现预产期计算器

来源:互联网 发布:国际淘宝下载 编辑:程序博客网 时间:2024/04/28 15:11
  • 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 实现预产期计算器

    标签: JAVA预产期计算器
    1968人阅读 评论(0)收藏举报
    分类:

      一天,有人问我,大师,怀孕32周是几个月呢?

     答:7个月零两个星期,

     为什么网上都是说8个月呢,从小就知道 4×8=32,医生也跟我说是7个月零两个星期,这是怎么算出来的。


    大师♂罗莊今天就把所有预产期计算器算法说下吧:

      如果月经周期不是28天的话,最后结果需要和(28- 月经周期)天数做加减,留给大家去思考了。

    [java] view plain copy
    1. package test;  
    2.   
    3. import java.text.ParseException;  
    4. import java.text.SimpleDateFormat;  
    5. import java.util.Calendar;  
    6. import java.util.Date;  
    7. import java.util.GregorianCalendar;  
    8.   
    9.   
    10. /**有关预产期计算的算法 
    11.  * @author 大师♂罗莊 
    12.  * 
    13.  */  
    14. public class pregnancyHelp {  
    15.   
    16.     /** 
    17.      * @param args 
    18.      * @throws ParseException 
    19.      */  
    20.     public static void main(String[] args) throws ParseException {  
    21.         // 请输入您的最后一次来月经的时间  
    22.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    23.         Date d1 = sdf.parse("2014-2-20");  
    24.         Calendar d = Calendar.getInstance();  
    25.         d.setTime(d1);  
    26.         setValue(d);  
    27.   
    28.     }  
    29.   
    30.     /** 
    31.      * @param localCalendar1 
    32.      *            末次月经时间 
    33.      * @throws ParseException 
    34.      */  
    35.     private static void setValue(Calendar localCalendar1) throws ParseException {  
    36.   
    37.         // 取今天时间  
    38.         Calendar Calendartoday = Calendar.getInstance();  
    39.         // 克隆一个保存下  
    40.         Calendar Calendarborn = (Calendar) localCalendar1.clone();  
    41.   
    42.         // 取今天和末次月经时间相差多少天  
    43.         long daysBetweennumber = daysBetween(localCalendar1.getTime(),  
    44.                 Calendartoday.getTime());  
    45.   
    46.         // 算出多少周  
    47.         int WeekBetweennumber = (int) daysBetweennumber / 7;  
    48.         // 零多少天  
    49.         long i1 = (daysBetweennumber + 1) % 7;  
    50.   
    51.         // 电脑计算预产期,只需在末次月经第一天加上9个月零1周(280天)即可  
    52.         Calendarborn.add(Calendar.DAY_OF_MONTH, 280);  
    53.   
    54.         // 计算预产期距离今天还有几天  
    55.         long borndayBetween = -1  
    56.                 + daysBetween(Calendartoday.getTime(), Calendarborn.getTime());  
    57.   
    58.         // 为输出年月日做准备  
    59.         int bornyear = Calendarborn.get(Calendar.YEAR);  
    60.         int bornmonth = 1 + Calendarborn.get(Calendar.MONTH);  
    61.         // MONTH加1的原因: public static final int MONTH 指示月份的 get 和 set  
    62.         // 的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是 JANUARY,它为 0;  
    63.         // 最后一个月取决于一年中的月份数。 简单来说,因为这个值的初始值是0,因此我们要用它来表示正确的月份时就需要加1。  
    64.         int bornday = Calendarborn.get(Calendar.DAY_OF_MONTH);  
    65.   
    66.         System.out.println("您已经怀孕" + daysBetweennumber + "天");  
    67.         String current = (WeekBetweennumber + "周" + i1 + "天");  
    68.         System.out.println("怀孕周数" + current);  
    69.         getMediMonthSpace(WeekBetweennumber);  
    70.         System.out.println("怀孕月数(直接减去法)"  
    71.                 + getMonthSpace(localCalendar1, Calendartoday) + "个月");  
    72.         String born = (borndayBetween + "天");  
    73.         System.out.println("距离宝宝出生还有" + born);  
    74.         String borndayString = (String.valueOf(bornyear) + "年"  
    75.                 + String.valueOf(bornmonth) + "月" + String.valueOf(bornday) + "日");  
    76.         System.out.println("预产期为" + borndayString);  
    77.         Calendarbornmanual(localCalendar1);  
    78.     }  
    79.   
    80.     /** 
    81.      * 计算方法:从末次月经第一天算起,月份减3,如不够时则加9,日数加7。 
    82.      *  
    83.      * @param cal 
    84.      *            从末次月经 
    85.      */  
    86.     static void Calendarbornmanual(Calendar cal) {  
    87.         Calendar temp = (Calendar) cal.clone();  
    88.         int month1 = temp.get(Calendar.MONTH) + 1;  
    89.         if (month1 < 3) {  
    90.             temp.add(Calendar.MONTH, 9);  
    91.         } else {  
    92.             temp.add(Calendar.MONTH, -3);  
    93.             temp.add(Calendar.YEAR, 1);  
    94.         }  
    95.         temp.add(Calendar.DAY_OF_MONTH, 7);  
    96.         System.out.println("人手工计算的预产期为");  
    97.         outprint(temp);  
    98.     }  
    99.   
    100.     /** 
    101.      * 计算两个日期之间相差的天数 需要用calendar,因为Date返回的永远是UTC时间,也就是时区永远比我们晚8个小时。 
    102.      *  
    103.      * @param smdate 
    104.      *            较小的时间 
    105.      * @param bdate 
    106.      *            较大的时间 
    107.      * @return 相差天数 
    108.      * @throws ParseException 
    109.      */  
    110.     public static long daysBetween(Date smdate, Date bdate)  
    111.             throws ParseException {  
    112.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    113.         smdate = sdf.parse(sdf.format(smdate));  
    114.         bdate = sdf.parse(sdf.format(bdate));  
    115.         Calendar cal = Calendar.getInstance();  
    116.         cal.setTime(smdate);  
    117.         long time1 = cal.getTimeInMillis();  
    118.         cal.setTime(bdate);  
    119.         long time2 = cal.getTimeInMillis();  
    120.         long between_days = (time2 - time1) / (1000 * 3600 * 24);  
    121.         return between_days;  
    122.     }  
    123.   
    124.     static void outprint(Calendar cal) {  
    125.         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
    126.   
    127.         // 打印  
    128.         System.out.println(dateFormat.format(cal.getTime()));  
    129.   
    130.     }  
    131.   
    132.     /** 
    133.      * 有人问我32w+(32周)怀孕几个月 
    134.      *  
    135.      * @param week 
    136.      *            输入周数 
    137.      */  
    138.     public static void getMediMonthSpace(int week) {  
    139.         // 此算法同原昆明某三甲医院产科主任算法一致,所以为什么我的算法和她医生算出来的一致  
    140.         int month = week * 7 / 30;// 周数算出月数,可以按28天或者30天算  
    141.         int weekleave = week * 7 % 30;// 周数算出剩下的天数  
    142.         // 也可以通过/7算出周数,大家自己去补充了  
    143.         System.out.print("怀孕月数(计算法)" + month + "个月");  
    144.         System.out.println(weekleave + "天");  
    145.     }  
    146.   
    147.     /** 
    148.      * 算两个日期差几个月,不能用Calendar.MONTH直接相减,否则2012年11月和2013年11月就是0 
    149.      *  
    150.      * @param scalendar 
    151.      *            日期1 
    152.      * @param calendar 
    153.      *            日期2 
    154.      * @return 两个日期差几个月 
    155.      */  
    156.     public static int getMonthSpace(Calendar scalendar, Calendar calendar) {  
    157.   
    158.         int year1 = calendar.get(Calendar.YEAR);  
    159.         int year2 = scalendar.get(Calendar.YEAR);  
    160.         int month1 = calendar.get(Calendar.MONTH);  
    161.         int month2 = scalendar.get(Calendar.MONTH);  
    162.   
    163.         int count = 0;  
    164.         if (year1 == year2 && month1 > month2) {  
    165.             count = month1 - month2;  
    166.         } else if (year1 == year2 && month1 < month2) {  
    167.             count = month2 - month1;  
    168.         } else if (year1 > year2 && month1 > month2) {  
    169.             count = (year1 - year2) * 12 + (month1 - month2);  
    170.         } else if (year1 > year2 && month1 < month2) {  
    171.             count = (year1 - year1) * 12 + (month2 - month1);  
    172.         } else if (year1 < year2 && month1 > month2) {  
    173.             count = (year2 - year1) * 12 + month1 - month2;  
    174.         } else if (year1 < year2 && month1 < month2) {  
    175.             count = (year2 - year1) * 12 + month2 - month1;  
    176.         }  
    177.         if (count < 0) {  
    178.   
    179.             count = Math.abs(count);  
    180.         }  
    181.         return count;  
    182.     }  
    183.   
    184.   
    185. }  

    输出

    [html] view plain copy
    1. 您已经怀孕230天  
    2. 怀孕周数32周0天  
    3. 怀孕月数(计算法)7个月14天  
    4. 怀孕月数(直接减去法)8个月  
    5. 距离宝宝出生还有49天  
    6. 预产期为2014年11月27日  
    7. 人手工计算的预产期为  
    8. 2014-11-27  



     
     

    0 0
    原创粉丝点击