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天)相关推荐

  1. php年龄,PHP 年龄计算函数(精确到天)

    PHP 年龄计算函数(精确到天) 发布于 2014-12-13 17:56:49 | 144 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...

  2. 年龄计算机在线计算,年龄计算器在线计算

    年龄计算器在线计算是一款最近在抖音上非常火的年龄计算器,可以精准的计算今年的哪一天你多少岁了,农历的时间也可以自由的转换,可以精确到分和秒哦,计算的界面非常的简洁,但很实用,也可以记录身边人重要的日子 ...

  3. 年龄计算机在线计算适合你的对象,年龄计算器恋爱对象APP

    年龄计算器恋爱对象APP是一款非常火爆的应用软件,主要就是可以使用这款软件计算年龄,这个软件的玩法非常的简单,在抖音上也非常火爆,受到很多人的喜欢,可以为用户一键查询年龄和生日,操作简单方便,得出结果 ...

  4. 【创建包:employee,完成如下功能】1. 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资

    [创建包:employee,完成如下功能] 1. 创建一个员工类(Employee),其中包括: 1) 4个私有属性:员工姓名(name).员工年龄(age).员工职位(position).工资(sa ...

  5. 百度年龄计算机在线使用,百度精准年龄计算器在线计算app

    百度精准年龄计算器在线计算app是一款十分便捷实用的计算器软件,这款app与正常的计算器不同,它是用来计算你的年龄的.使用了高智能的AI在线为用户们进行计算并且还能够进行一定的预测,包括你的后几年的生 ...

  6. java通过身份证号计算周岁年龄(附js计算)

    最近项目上有一个需要根据身份证获取老人周岁的功能,本以为当前年直接减去身份证的出生年就好了.结果测试提了过了生日就是+1岁,没过生日才是正确的.于是呼,哗哗的改代码.下面分别贴出java计算和js计算 ...

  7. 狗狗的年龄的python编程_狗狗的年龄是怎么计算的?

    展开全部 文/逗一会儿猫 为什么狗狗年龄只有短短的十几年?多少岁算是老龄犬?关于狗32313133353236313431303231363533e58685e5aeb931333433633338狗 ...

  8. 【Python 3.7】电影票:有家电影院根据观众的年龄收取不同的票价:不到3岁的观众免费; 3~12岁的观众为10美元;超过12岁的观众为15美元。请编写一个循环,在其中询问用户的年龄,指出其票价。

    [Python 3.7]电影票:有家电影院根据观众的年龄收取不同的票价:不到3岁的观众免费: 3~12岁的观众为10美元:超过12岁的观众为15美元.请编写一个循环,在其中询问用户的年龄,指出其票价. ...

  9. 本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。

    本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + - 直到最后一项的绝对值不大于给定精度eps. 输入格式: 输入在一行中给出一个正实数eps. 输出格式: 在一行中按照 ...

最新文章

  1. 26期20180601目录管理
  2. 【大牛招生】李飞飞的实验室招人了!不限专业,有跨学科研究经验优先
  3. Oracle创建表管理表
  4. Android Studio使用OpenCV后,使APP不安装OpenCV Manager即可运行
  5. mysql 替换 多个逗号_如何使用mySQL replace()替换多个记录中的字符串?
  6. SAP ECC 6.0有哪些增强功能
  7. java url 授权,Spring MVC框架 - 基本认证之URL 授权认证
  8. Kube Controller Manager 源码分析
  9. OpenCV调用YOLOv4进行目标检测
  10. jsp 跳到servlet路径_请问如何从jsp中跳到servlet中?
  11. php scandir遍历,php使用scandir()函数扫描指定目录下所有文件示例
  12. Angular Extends
  13. 比较运算符(ComparisonOperator)
  14. 美团取消支付宝支付引关注,称饿了么也不支持微信支付,饿了么回应绝了
  15. angularsjs单独删除一条信息,不刷新页面
  16. (30)auth模块(django自带的用户认证模块)
  17. 阿里巴巴Java编程规范试题答案
  18. Stata中的单位根检验
  19. 彻底卸载微软拼音输入法
  20. kafka不消费:9092 (id: 0 rack: null)

热门文章

  1. 电脑怎么使用自带的截图功能
  2. 金浦钛业子公司布局千亿元应用市场
  3. 华为FreeBuds 5降噪好不好?
  4. 002-JVM-什么是垃圾
  5. 操作系统--并发与并行
  6. edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析 – 生信笔记
  7. pytest源码解读HookspecMarker类和HookimplMarker类分析
  8. 高级软件工程团队第一次作业
  9. 详解C语言实现strcmp()
  10. 老梁带你分析电子火折子的电路原理