生日转年龄

思路

  1. 获取Date类型的生日,之后转换成毫秒,再把当前的毫秒数相减就可以获得到用户活了多少毫秒,再把毫秒转换成天转换成年即可,可能需要处理一下闰年的情况
  2. 获取Date类型的生日,转换成Calendar,把当前时间也转成Calendar之后获取两者Calendar.YEAR,两者相减,之后判断生日的Calendar.DAY_OF_YEAR是否大于当前时间,如果大于说明还没有到今年的生日,刚刚算出来的年龄要减一

实现

1.转换毫秒(没有处理闰年的)

        String dateStr = "1999-1-1";
        Date date = Date.valueOf(dateStr);
        Date now = new Date(System.currentTimeMillis());
        //相差天数
        int day = (int)((now.getTime()-date.getTime()) / (1000 * 60 * 60 * 24));
        System.out.println("年龄=" + (day / 365));

2.使用Calendar

        String dateStr = "1999-1-1"; //生日
        Date date = Date.valueOf(dateStr);
        Calendar now = Calendar.getInstance();
        Calendar birth = Calendar.getInstance();
        birth.setTime(date);
        int age = 0;
        if(birth.after(now)) {
            //当生日在当前时间的前面的时候->这是不可能的
        } else {
            age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
            if(now.get(Calendar.DAY_OF_YEAR) < birth.get(Calendar.DAY_OF_YEAR)) {
                age -= 1;
            }
        }
        System.out.println("年龄=" + age);

个人比较推荐第二种方法,比较直接而且日期计算一般都不直接用Date相关的方法的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • import java.text.SimpleDateFormat;import java.util.Calend...
    霙愔阅读 4,084评论 0 2
  • SwiftDate概况 从Swift发布起,我们就没有放弃使用Swift。 当然,我们希望在项目能够轻松自如地管理...
    Mee_Leo阅读 13,433评论 1 13
  • 第05天API 今日内容介绍 ·Object类& System类 ·日期相关类 ·包装类&正则表达式 ·Date对...
    chcvn阅读 3,161评论 0 1
  • add: init: update:
    ShawnDu阅读 1,345评论 0 1
  • 等人这件事,总让人烦心。 北京不靠谱的交通,让每一次聚会都雪上加霜。每一场同学会上,都有人姗姗来迟,来上一句,不好...
    Jenny乔阅读 3,218评论 1 8