Java结合Kotlin实现宝宝年龄计算

目录
  • 通过生日计算宝宝多大了
    • 输出结果
  • 再来一个Kotlin版
    • 输出结果

通过生日计算宝宝多大了

前段时间大家在打新冠状疫苗的时候,护士给了我一张小纸条,上面清晰的显示我在地球上的年龄26岁4个月零3天。我们也写个代码走起

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class LifeAge{
    /**
     * @param birthday 日期格式yyyy-MM-dd
     *                 根据用户生日计算年龄
     *                 用Calender对象取得当前日期对象--从对象中分别取出年月日
     *                 输出结果 例如 26岁7月零9天
     */
    public static String getAgeByBirth(String birthday) {
        //从Calendar对象中或得一个Date对象
        Calendar now = Calendar.getInstance();
        /*把出生日期放入Calendar类型的bir对象中,进行Calendar和Date类型进行转换*/
        Calendar bir = Calendar.getInstance();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            bir.setTime(simpleDateFormat.parse(birthday));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //如果生日大于当前日期,则抛出异常:出生日期不能大于当前日期
        if (now.before(birthday)) {
            throw new IllegalArgumentException("The birthday is before Now,It's unbelievable");
        }
        //取出当前年月日
        int yearNow = now.get(Calendar.YEAR);
        int monthNow = now.get(Calendar.MONTH) + 1;
        int dayNow = now.get(Calendar.DAY_OF_MONTH);
        //取出出生年月日
        int yearBirth = bir.get(Calendar.YEAR);
        int monthBirth = bir.get(Calendar.MONTH) + 1;
        int dayBirth = bir.get(Calendar.DAY_OF_MONTH);
        //先day相减,不够向month借,然后month相减,不够向year借,最后year相减。
        int day = dayNow - dayBirth;
        int month = monthNow - monthBirth;
        //年龄是当前年减去出生年
        int year = yearNow - yearBirth;
        if (day < 0) {
            month -= 1;
            now.add(Calendar.MONTH, -1);//得到上一个月,用来得到上个月的天数。
            //借一个月
            day = day + now.getActualMaximum(Calendar.DAY_OF_MONTH);
        }
        if (month < 0) {
            //一年12个月,借12个月
            month = (month + 12) % 12;
            //借了12个月,少一年
            year--;
        }
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(year + "岁");
        stringBuilder.append(month + "月");
        if (day < 20) {
            stringBuilder.append("零" + day + "天");
        } else {
            stringBuilder.append(day + "天");
        }
        if (year == 0 && month == 0 && day == 0) {
            stringBuilder.delete(0, stringBuilder.length());
            stringBuilder.append("今日出生");
        }
        return stringBuilder.toString();
    }
    /*main方法测试*/
    public static void main(String[] args) {
        String birthday = "1993-10-18";
        String age = getAgeByBirth(birthday);
        System.out.print("年龄=" + age);
    }
}

输出结果

26岁7月零9天

再来一个Kotlin版

import java.text.SimpleDateFormat
import java.util.*
class LifeAge {
    /**
     * @param birthday 日期格式yyyy-MM-dd
     * 根据用户生日计算年龄
     * 用Calender对象取得当前日期对象--从对象中分别取出年月日
     * 输出结果 例如 26岁9个月零28天
     */
     fun getAgeByBirth(birthday: String?): String {
        //从Calendar对象中或得一个Date对象
        val now = Calendar.getInstance()
        /*把出生日期放入Calendar类型的bir对象中,进行Calendar和Date类型进行转换*/
        val bir = Calendar.getInstance()
        val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd")
        bir.time = simpleDateFormat.parse(birthday)
        //如果生日大于当前日期,则抛出异常:出生日期不能大于当前日期
        require(!now.before(birthday)) { "The birthday is before Now,It's unbelievable" }
        //取出当前年月日
        val yearNow = now[Calendar.YEAR]
        val monthNow = now[Calendar.MONTH] + 1
        val dayNow = now[Calendar.DAY_OF_MONTH]
        //取出出生年月日
        val yearBirth = bir[Calendar.YEAR]
        val monthBirth = bir[Calendar.MONTH] + 1
        val dayBirth = bir[Calendar.DAY_OF_MONTH]
        //先day相减,不够向month借,然后month相减,不够向year借,最后year相减。
        var day = dayNow - dayBirth
        var month = monthNow - monthBirth
        //年龄是当前年减去出生年
        var year = yearNow - yearBirth
        if (day < 0) {
            month -= 1
            now.add(Calendar.MONTH, -1) //得到上一个月,用来得到上个月的天数。
            //借一个月
            day += now.getActualMaximum(Calendar.DAY_OF_MONTH)
        }
        if (month < 0) {
            //一年12个月,借12个月
            month = (month + 12) % 12
            //借了12个月,少一年
            year--
        }
        val stringBuilder = StringBuilder()
        stringBuilder.append(year.toString() + "岁")
        stringBuilder.append(month.toString() + "月")
        if (day < 20) {
            stringBuilder.append("零" + day + "天")
        } else {
            stringBuilder.append(day.toString() + "天")
        }
        if (year == 0 && month == 0 && day == 0) {
            stringBuilder.delete(0, stringBuilder.length)
            stringBuilder.append("今日出生")
        }
        return stringBuilder.toString()
    }
}
/*main方法测试*/
fun main() {
    val birthday = "1994-10-18"
    val age = LifeAge().getAgeByBirth(birthday)
    print("年龄=$age")
}

输出结果

以上就是Java结合Kotlin实现宝宝年龄计算的详细内容,更多关于Java Kotlin年龄计算的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java中的Kotlin 内部类原理

    目录 Java 中的内部类 OutterJava.class InnJava.class Kotlin 中的内部类 总结 Java 中的内部类 这是一个 Java 内部类的简单实现: public class OutterJava {    private void printOut() {        System.out.println("AAA");   } ​    class InnJava {        public void printInn() {        

  • Java与kotlin详细对比

    在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言. 为什么选择 Kotlin? 简洁: 大大减少样板代码的数量. 安全: 避免空指针异常等整个类的错误. 互操作性: 充分利用 JVM.Android 和浏览器的现有库. 工具友好: 可用任何 Java IDE 或者使用命令行构建. 使用kotlin已经有一段时间了.打算从宏观上做一下java和kotlin的对比.java8虽然也有很多新特性,但是android低版本并不兼容.因此这里以旧版本

  • Kotlin 和 Java 混合开发入门教程

    目录 一.前沿 二.学习 Kotlin 前准备 三.Kotlin 语法简介 优秀的表达式 加强版 switch 模板字符串 空指针异常不存在了 编写单例类 扩展方法 运算符重载 四.Kotlin 与 Java 混合开发 五.Kotlin 与 Java 总结 一.前沿 如果你学习过其他的编程语言,你就会发现 Java 的语法很是哆嗦,可是我们为什么没有放弃 Java 这门编程语言呢?因为 JVM 是一个非常好的平台,而且 Java 程序员目前在中国所占的比重实在是太高了.这是历史包袱导致的.暂且不

  • java协程框架quasar和kotlin中的协程对比分析

    目录 前言 快速体验 添加依赖 添加javaagent 线程VS协程 协程代码 多线程代码 协程完胜 后记 前言 早就听说Go语言开发的服务不用任何架构优化,就可以轻松实现百万级别的qps.这得益于Go语言级别的协程的处理效率.协程不同于线程,线程是操作系统级别的资源,创建线程,调度线程,销毁线程都是重量级别的操作.而且线程的资源有限,在java中大量的不加限制的创建线程非常容易将系统搞垮.接下来要分享的这个开源项目,正是解决了在java中只能使用多线程模型开发高并发应用的窘境,使得java也能

  • Kotlin与Java相互调用的完整实例

    目录 一.Kotlin 调用 Java 二.Java 调用 Kotlin 附 Github 源码: 总结 一.Kotlin 调用 Java 1. kotlin 关键字转义 java 中的方法或变量 是 kotlin 的关键字时,使用反引号 `` 对关键字进行转义 // java public class JavaDemo { String is; public String getIs() { return is; } public void setIs(String is) { this.is

  • Kotlin与Java的区别详解

    什么是Kotlin? Kotlin是一种可以在 Java 虚拟机 (JVM) 上运行的开源编程语言.该语言可以在许多平台上运行. 它是一种将面向对象编程 (OOP) 和函数式编程结合在一个不受限制.自给自足且与众不同的平台中的语言. 什么是Java? Java 是一种多平台.面向对象.以网络为中心的编程语言.它是最常用的编程语言之一.它也用作计算平台,最早由 Sun Microsystem 于 1995 年发布,后来被 Oracle 公司收购. 主要区别: Kotlin 结合了面向对象和函数式编

  • Java结合Kotlin实现宝宝年龄计算

    目录 通过生日计算宝宝多大了 输出结果 再来一个Kotlin版 输出结果 通过生日计算宝宝多大了 前段时间大家在打新冠状疫苗的时候,护士给了我一张小纸条,上面清晰的显示我在地球上的年龄26岁4个月零3天.我们也写个代码走起 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; public class LifeAge{ /** * @param birthday

  • 深入理解 Java、Kotlin、Go 的线程和协程

    前言 Go 语言比 Java 语言性能优越的一个原因,就是轻量级线程Goroutines(协程Coroutine).本篇文章深入分析下 Java 的线程和 Go 的协程. 协程是什么 协程并不是 Go 提出来的新概念,其他的一些编程语言,例如:Go.Python 等都可以在语言层面上实现协程,甚至是 Java,也可以通过使用扩展库来间接地支持协程. 当在网上搜索协程时,我们会看到: Kotlin 官方文档说「本质上,协程是轻量级的线程」. 很多博客提到「不需要从用户态切换到内核态」.「是协作式的

  • Java实现利用广度优先遍历(BFS)计算最短路径的方法

    本文实例讲述了Java实现利用广度优先遍历(BFS)计算最短路径的方法.分享给大家供大家参考.具体分析如下: 我们用字符串代表图的顶点(vertax),来模拟学校中Classroom, Square, Toilet, Canteen, South Gate, North Gate几个地点,然后计算任意两点之间的最短路径. 如下图所示: 如,我想从North Gate去Canteen, 程序的输出结果应为: BFS: From [North Gate] to [Canteen]: North Ga

  • Java基于余弦方法实现的计算相似度算法示例

    本文实例讲述了Java基于余弦方法实现的计算相似度算法.分享给大家供大家参考,具体如下: (1)余弦相似性 通过测量两个向量之间的角的余弦值来度量它们之间的相似性.0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1.从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向.所以,它通常用于文件比较. 相关介绍可参考百度百科:余弦相似性 (2)算法实现的中未使用权重(IDF ---逆文档频率),使用词项的出现次数作为向量空间的值. import java.util.H

  • PHP 年龄计算函数(精确到天)

    复制代码 代码如下: <?php /** * PHP 年龄计算函数 * * 参数支持数组传参和标准的 Mysql date 类型传参 * params sample * -------------------------------------------------- $birthArr = array( 'year' => '2000', 'month' => '11', 'day' => '3' ); $birthStr = '2000-11-03'; * ---------

  • Java TreeSet实现学生按年龄大小和姓名排序的方法示例

    本文实例讲述了Java TreeSet实现学生按年龄大小和姓名排序的方法.分享给大家供大家参考,具体如下: import java.util.*; class Treeset { public static void main(String[] args) { TreeSet t = new TreeSet(); t.add(new student("a1",15)); t.add(new student("a2",15)); t.add(new student(&

  • java把字符串转化成公式计算的示例

    如下所示: static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); Object aa = jse.eval(indexFormula) 以上这篇java把字符串转化成公式计算的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 在Java与Kotlin之间如何进行互操作详解

    前言 目前kotlin是谷歌首推的开发Android的语言,但由于历史原因,我们绝大部分项目依旧还是以Java为主的,也就是说存在Java和Kotlin两种语言同时开发的情况. 有人会说把老项目全部翻译成Kotlin,的确可以怎么做,但是成本还是挺大的.我们只能一点一点慢慢的向kotlin语言迁移. 那么在迁移的过程中就避免不了Java和Kotlin相互调用的情况.即Kotlin调用Java或者Java调用Kotlin.下面我们就来具体看下两者之间相互操作的一些解决方案. kotlin调用jav

  • java算法之余弦相似度计算字符串相似率

    概述 功能需求:最近在做通过爬虫技术去爬取各大相关网站的新闻,储存到公司数据中.这里面就有一个技术点,就是如何保证你已爬取的新闻,再有相似的新闻 或者一样的新闻,那就不存储到数据库中.(因为有网站会去引用其它网站新闻,或者把其它网站新闻拿过来稍微改下内容就发布到自己网站中). 解析方案:最终就是采用余弦相似度算法,来计算两个新闻正文的相似度.现在自己写一篇博客总结下. 一.理论知识 先推荐一篇博客,对于余弦相似度算法的理论讲的比较清晰,我们也是按照这个方式来计算相似度的.网址:相似度算法之余弦相

  • 一篇文章弄懂Java和Kotlin的泛型难点

    Java 和 Kotlin 的泛型算作是一块挺大的知识难点了,涉及到很多很难理解的概念:泛型型参.泛型实参.类型参数.不变.型变.协变.逆变.内联等等.本篇文章就将 Java 和 Kotlin 结合着一起讲,按照我的个人理解来阐述泛型的各个知识难点,希望对你有所帮助

随机推荐