java根据孩子生日,比如1979-05-13,怎么转换孩子年龄为几岁几月几周,比如一岁10月两周

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java根据孩子生日,比如1979-05-13,怎么转换孩子年龄为几岁几月几周,比如一岁10月两周相关的知识,希望对你有一定的参考价值。

public class TestDate 
/**
 * 获取现在时间
 */
public static String getStringDate() 
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;


/**
 * 两个时间之间的天数
 */
public static long getDays(String date1, String date2) 
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try 
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
 catch (Exception e) 

long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return Math.abs(day);

public static void main(String[] args) 
long day=getDays("1979-04-13", getStringDate());
long year=day/365;
long month=(day-365L*year)/30+1;
long week=day/7+1;
System.out.println(year+"岁"+month+"月"+week+"周");

由于没考虑闰年闰月,不是那么准确,另外题目对于周的显示上是指一个月的第几周还是总共多少周?

楼下JAVA软件工程师孙成 截取字符串的方法也很不错,但在计算周有错误,不应该用%,改成Math.abs((stopz +30)- (startz+30))/7+1 

参考技术A 代码经过测试,可以放心使用

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import javax.swing.text.DateFormatter;
/**
* @author 作者 lvrt:
* @version 创建时间:2014-4-22 下午01:46:11
*/
public class Test
public static void main(String[] args)
System.out.println("请输入用户的生日,生日格式yyyy-MM-dd,如1988-08-12");
Scanner sc = new Scanner(System.in);
String birth = sc.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try
Date birthDay = sdf.parse(birth);
Date now = new Date();
Long betweenDay = getBetweenDay(birthDay, now); //孩子出生到现在的天数
//对孩子的年份求职
int year = (int)(betweenDay / 365);
betweenDay = betweenDay - year*365; //此时间隔日期是一年以内的天数
int month = (int)(betweenDay / 30);
betweenDay = betweenDay - month*30; //此时间隔日期是一月以内的天数
int week = (int)(betweenDay / 7);
System.out.println("孩子的年龄是"+year+"年"+month+"月"+week+"周");
catch (ParseException e)
e.printStackTrace();




public static Long getBetweenDay(Date date1, Date date2)
Long days = Long.valueOf(0L);
if (date1.getTime() > date2.getTime())
days = Long.valueOf(date1.getTime() - date2.getTime());
else
days = Long.valueOf(date2.getTime() - date1.getTime());
return Long.valueOf(days.longValue() / 60L / 60L / 1000L / 24L);

追问

比如说孩子生日是2012年10月23日,就是获取孩子是几岁零几月零几周,是这样做吗

追答

我这个是可以手动输入生日,比如说输入2013-10-23,求出他距离现在的日期是0年XX月xx周

追问

太感谢了

参考技术B public class DateDemo 

public static void main(String[] args) throws java.text.ParseException 
String start = "1979-01-13";
java.text.SimpleDateFormat sim = new java.text.SimpleDateFormat("yyyy-MM-dd");
String stop =  sim.format(new java.util.Date());
int zs = (Integer.parseInt(stop.substring(0,4)) - Integer.parseInt(start.substring(0,4)))-1;
int starty = Integer.parseInt(start.substring(5, 7));
int stopy = Integer.parseInt(stop.substring(5, 7));
int startz = Integer.parseInt(start.substring(8, 10));
int stopz = Integer.parseInt(stop.substring(8, 10));
int yf = 0;
int jz = 0;
if(starty > stopy)
yf = 12 - starty + stopy;
else
yf = 12 - stopy + starty;

if(startz > stopz)
jz = (startz - stopz) % 7;
else
jz = (stopz - startz) % 7;

System.out.println(zs + "岁" + yf + "个月" + jz + "周");

追问

比如说孩子生日是2012年10月23日,就是获取孩子是几岁零几月零几周,是这样做吗

追答

是的,可以手动计算,也可以得到毫秒计算。

追问

非常感谢

追答

不用客气。

参考技术C

不知道对不对:

小小的写了一下~

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

public class a 
public static void main(String[] args) 
a as = new a();
try 
String str=as.getAge(new Date(),"2012-4-4");
System.out.println(str);
 catch (Exception e) 
e.printStackTrace();



/**
 * 
 * @param date 现在日期
 * @param birthday 出生日期
 * @return
 * @throws Exception
 */
public String getAge(Date date,String birthday) throws Exception 
String str="";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = GregorianCalendar.getInstance();
try 
calendar.setTime(date);
int theYear=calendar.get(Calendar.YEAR);
int theMonth=calendar.get(Calendar.MONTH)+1;
int theDay=calendar.get(Calendar.DATE);

calendar.setTime(sdf.parse(birthday));

int birthYear=calendar.get(Calendar.YEAR);
int birthMonth=calendar.get(Calendar.MONTH)+1;
int birthDay=calendar.get(Calendar.DATE);

int year=theYear-birthYear;
int month=theMonth-birthMonth;
int day=theDay-birthDay;
int week=day%7;
str=year+"岁"+month+"月"+week+"周"+day;
 catch (ParseException e) 
System.out.println(e);


return str;


追问

比如说孩子生日是2012年10月23日,就是获取孩子是几岁零几月零几周,是这样做吗

追答

你跑一下代码就知道了啊! 我都给代码给你了 ,你多看看就行了。

追问

多谢了

java根据身份证号码得到生日和性别

java根据身份证号码得到生日和性别

IDCards工具类

package com.liantuo.finance.utils;

//身份证工具类
public class IDCards {
	/** 
	 * 根据身份证号码得到生日,并返回性别 
	 * @param num 
	 * @return String[] string[0]生日 格式:19900510, string[1]性别
	 * 如果证件类型非法,则返回null 
	 */ 
	public static String[] getDataByNo(String num) {
	    // 判断是否为空  
	    if (num == null || num.trim().equals("")) {  
	        return null;  
	    }  
	    //得到证件号码长度  
	    int length = num.length();  
	    // 判断是否为15或18位  
	    if (length != 15 && length != 18) {  
	        return null;  
	    }  
	    //如果证件号码为15位,转换为18位  
	    if(length == 15){  
	        num=uptoeighteen(num);  
	    }

	    String[] data = new String[2];

		// 得到生日
		data[0] = num.substring(6, 14);
		// 校验性别
		data[1] = num.substring(14, 17);
		// 性别代码为偶数是女性奇数为男性
		if (Integer.parseInt(data[1]) % 2 == 0) {
			data[1] = "女";
		} else {
			data[1] = "男";
		}

	    return data;  
	}

	// 15位身份证号码提升为18位  
	private static String uptoeighteen(String fifteencardid) {
	    String eightcardid = fifteencardid.substring(0, 6);
	    eightcardid = eightcardid + "19";  
	    eightcardid = eightcardid + fifteencardid.substring(6, 15);  
	    eightcardid = eightcardid + getVerify(eightcardid);  
	    return eightcardid;  
	}

	// 得到第18位的校验码  
	private static String getVerify(String eightcardid) {
	    int remaining = 0;  
	    int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };  
	    int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };  
	    int[] ai = new int[18];  
	    String returnStr = null;
	    try {  
	        if (eightcardid.length() == 18) {  
	            eightcardid = eightcardid.substring(0, 17);  
	        }  
	        if (eightcardid.length() == 17) {  
	            int sum = 0;  
	            String k = null;
	            for (int i = 0; i < 17; i++) {  
	                k = eightcardid.substring(i, i + 1);  
	                ai[i] = Integer.parseInt(k);
	                k = null;  
	            }  
	            for (int i = 0; i < 17; i++) {  
	                sum = sum + wi[i] * ai[i];  
	            }  
	            remaining = sum % 11;  
	        }  
	        returnStr = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
	    } catch (Exception ex) {
	        return null;  
	    } finally {  
	        wi = null;  
	        vi = null;  
	        ai = null;  
	    }  
	    return returnStr;  
	}

	public static void main(String[] args) {
		String[] dataByNo = getDataByNo("xxxxxxxxxxxx");
		System.out.println(dataByNo[0]);
		System.out.println(dataByNo[1]);
	}

}

执行结果

在这里插入图片描述

以上是关于java根据孩子生日,比如1979-05-13,怎么转换孩子年龄为几岁几月几周,比如一岁10月两周的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 里面怎写Oracle的数据库回滚

场景应用:Java 写一个根据生日日期计算距离生日还有多少天的工具类?

java根据身份证号码得到生日和性别

等我怎么怎了,就如何如何

java根据生日精确计算年龄

java 根据省份证号-判断省份-性别-生日