年龄Age的计算(可以精确到1岁3个月10天)
import java.text.SimpleDateFormat /** * 年龄对象(3岁、3个月、30天) */ class Age { Integer age AgeUnit unit Integer year Integer month Integer day Age() { } Age(int age) { this.age = age unit = AgeUnit.YearOfAge } Age(String str) { def regular = /^(/d+)(/S+)?/ if (!(str ==~ regular)) { throw new IllegalArgumentException("不是年龄格式") } def result = (str =~ regular) //拆分 age = Integer.parseInt(result[0][1]) unit = result[0][2] ? AgeUnit.getUnitBySymbol(result[0][2]) : AgeUnit.YearOfAge } Age(int age, AgeUnit unit) { this.age = age this.unit = unit } Age(Date birthday) { this(birthday, new Date()) } Age(Date birthday, Date today) { Calendar birthdayCalender = Calendar.getInstance() birthdayCalender.setTime(birthday) Calendar todayCalender = Calendar.getInstance() todayCalender.setTime(today) day = todayCalender.get(Calendar.DAY_OF_MONTH) - birthdayCalender.get(Calendar.DAY_OF_MONTH); month = todayCalender.get(Calendar.MONTH) - birthdayCalender.get(Calendar.MONTH); year = todayCalender.get(Calendar.YEAR) - birthdayCalender.get(Calendar.YEAR); //按照减法原理,先day相减,不够向month借;然后month相减,不够向year借;最后year相减。 if (day < 0) { month -= 1; todayCalender.add(Calendar.MONTH, -1);//得到上一个月,用来得到上个月的天数。 day = day + todayCalender.getActualMaximum(Calendar.DAY_OF_MONTH); } if (month < 0) { month = (month + 12) % 12; year--; } if (year > 0) { age = year unit = AgeUnit.YearOfAge } else if (month > 0) { age = month unit = AgeUnit.MonthOfAge } else { age = day unit = AgeUnit.DayOfAge } } public String display() { return age + unit } public String toString() { return "Age{" + "age=" + age + ", unit=" + unit + ", year=" + year + ", month=" + month + ", day=" + day + '}'; } } enum AgeUnit { YearOfAge("岁"), MonthOfAge("个月"), DayOfAge("天"); private String symbol; AgeUnit(String symbol) { this.symbol = symbol; } public String getSymbol() { return symbol; } @Override public String toString() { return symbol; } public static AgeUnit getUnitBySymbol(String val) { val = val.trim().toLowerCase(); if ("岁".equals(val)) return YearOfAge; else if ("个月".equals(val)) return MonthOfAge; else if ("月".equals(val)) return MonthOfAge; else if ("天".equals(val)) return DayOfAge; throw new IllegalArgumentException(val + "不是合法的年龄单位"); } } class AgeTest extends GroovyTestCase { def testAge() { Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2008-07-01") Date today = new SimpleDateFormat("yyyy-MM-dd").parse("2011-07-01") def age = new Age(date, today) println age // Age{age=3, unit=岁, year=3, month=0, day=0} } }
年龄Age的计算(可以精确到1岁3个月10天)相关推荐
- php年龄,PHP 年龄计算函数(精确到天)
PHP 年龄计算函数(精确到天) 发布于 2014-12-13 17:56:49 | 144 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...
- 年龄计算机在线计算,年龄计算器在线计算
年龄计算器在线计算是一款最近在抖音上非常火的年龄计算器,可以精准的计算今年的哪一天你多少岁了,农历的时间也可以自由的转换,可以精确到分和秒哦,计算的界面非常的简洁,但很实用,也可以记录身边人重要的日子 ...
- 年龄计算机在线计算适合你的对象,年龄计算器恋爱对象APP
年龄计算器恋爱对象APP是一款非常火爆的应用软件,主要就是可以使用这款软件计算年龄,这个软件的玩法非常的简单,在抖音上也非常火爆,受到很多人的喜欢,可以为用户一键查询年龄和生日,操作简单方便,得出结果 ...
- 【创建包:employee,完成如下功能】1. 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资
[创建包:employee,完成如下功能] 1. 创建一个员工类(Employee),其中包括: 1) 4个私有属性:员工姓名(name).员工年龄(age).员工职位(position).工资(sa ...
- 百度年龄计算机在线使用,百度精准年龄计算器在线计算app
百度精准年龄计算器在线计算app是一款十分便捷实用的计算器软件,这款app与正常的计算器不同,它是用来计算你的年龄的.使用了高智能的AI在线为用户们进行计算并且还能够进行一定的预测,包括你的后几年的生 ...
- java通过身份证号计算周岁年龄(附js计算)
最近项目上有一个需要根据身份证获取老人周岁的功能,本以为当前年直接减去身份证的出生年就好了.结果测试提了过了生日就是+1岁,没过生日才是正确的.于是呼,哗哗的改代码.下面分别贴出java计算和js计算 ...
- 狗狗的年龄的python编程_狗狗的年龄是怎么计算的?
展开全部 文/逗一会儿猫 为什么狗狗年龄只有短短的十几年?多少岁算是老龄犬?关于狗32313133353236313431303231363533e58685e5aeb931333433633338狗 ...
- 【Python 3.7】电影票:有家电影院根据观众的年龄收取不同的票价:不到3岁的观众免费; 3~12岁的观众为10美元;超过12岁的观众为15美元。请编写一个循环,在其中询问用户的年龄,指出其票价。
[Python 3.7]电影票:有家电影院根据观众的年龄收取不同的票价:不到3岁的观众免费: 3~12岁的观众为10美元:超过12岁的观众为15美元.请编写一个循环,在其中询问用户的年龄,指出其票价. ...
- 本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + - 直到最后一项的绝对值不大于给定精度eps. 输入格式: 输入在一行中给出一个正实数eps. 输出格式: 在一行中按照 ...
最新文章
- 26期20180601目录管理
- 【大牛招生】李飞飞的实验室招人了!不限专业,有跨学科研究经验优先
- Oracle创建表管理表
- Android Studio使用OpenCV后,使APP不安装OpenCV Manager即可运行
- mysql 替换 多个逗号_如何使用mySQL replace()替换多个记录中的字符串?
- SAP ECC 6.0有哪些增强功能
- java url 授权,Spring MVC框架 - 基本认证之URL 授权认证
- Kube Controller Manager 源码分析
- OpenCV调用YOLOv4进行目标检测
- jsp 跳到servlet路径_请问如何从jsp中跳到servlet中?
- php scandir遍历,php使用scandir()函数扫描指定目录下所有文件示例
- Angular Extends
- 比较运算符(ComparisonOperator)
- 美团取消支付宝支付引关注,称饿了么也不支持微信支付,饿了么回应绝了
- angularsjs单独删除一条信息,不刷新页面
- (30)auth模块(django自带的用户认证模块)
- 阿里巴巴Java编程规范试题答案
- Stata中的单位根检验
- 彻底卸载微软拼音输入法
- kafka不消费:9092 (id: 0 rack: null)