JAVA 实现预产期计算器
来源:互联网 发布:javascript好书 编辑:程序博客网 时间:2024/04/28 21:12
一天,有人问我,大师,怀孕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
0 0
- JAVA 实现预产期计算器
- JAVA 实现预产期计算器
- iOS 预产期计算器 —— HERO博客
- java实现计算器
- java实现的计算器
- JAVA实现简易计算器
- Java实现表达式计算器
- Java实现简单计算器
- java实现简易计算器
- JAVA计算器算法实现
- 【Java】简单计算器实现
- JAVA实现简单计算器
- java实现阶层计算器
- java实现简易计算器
- java实现计算器
- java实现计算器
- java实现计算器
- java实现简单计算器
- 解决eclipse中原有项目中js验证问题致使build不完的问题
- 如何把多个Android Project打包成一个APK
- 虚拟机无法识别usb接口
- Php版本的GetElementById
- Android最佳学习路线图 pdf分享
- JAVA 实现预产期计算器
- PHP设置网址转发
- ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程错误解决方案(Oracle数据优化)
- eclipse构建maven的web项目
- mac上彻底卸载openfire
- 洞悉网站排名背后的秘密
- 跟着8张思维导图学习javascript
- Codesoft C#中的应用--调用模板
- 电梯调度算法详解