先写一个简单的例子,判断是否年满18周岁。对于这个问题我的第一反映是计算现在与其生日的时间差,通过时间戳来计算这个差值是否是18年,但是这样就会出现一个问题,之间会有闰年,而且每个月的天数也不一致;第二种是通过出生年加上18,至少这样让我感觉没有第一种方法的如此多的不确定性。代码如下:
boolean isAudit = false;
try {
//格式化
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
//出生日期
Date birthday = simpleDateFormat.parse("19970724");
Calendar calendar = Calendar.getInstance();
calendar.setTime(birthday);
//出生日期加上18年
calendar.add(Calendar.YEAR, 18);
//当前时间
Date now = new Date();
Calendar nowCalendar = Calendar.getInstance();
//将时分秒设置为0,格式为19880911 00:00:00
nowCalendar.setTime(now);
// 如果用此Field则按十二小时格式设置值,Noon and midnight表示为0,而不是12.
// nowCalendar.set(Calendar.HOUR, 0);
nowCalendar.set(Calendar.HOUR_OF_DAY, 0);
nowCalendar.set(Calendar.MINUTE, 0);
nowCalendar.set(Calendar.SECOND, 0);
if(calendar.before(nowCalendar)){
isAudit = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
Calendar
Calendar 在 Java 中是一个抽象类(Abstract Class)。
Calendar与时间的转换
Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 将 Date 对象反应到一个 Calendar 对象中,
// 所以我们必需先获得一个实例,然后设置 Date 对象
calendar.setTime(date);
注意事项
月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
calendar.set(Calendar.MONTH, 7);
SimpleDateFormat
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区