java如何对生日(yyyymmdd)进行合法性判断?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何对生日(yyyymmdd)进行合法性判断?相关的知识,希望对你有一定的参考价值。
麻烦写下详细算法,谢谢!
修改你说的存在的bugimport java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestBirthday
public static void main(String[] args)
String birthday="20130132";
System.out.println(isBirthday(birthday));
/*
* @param : birthday 传入一个日期格式的字符串
* 支持 yyyy-MM-dd ,yyyyMMdd MM-dd-yyyy ,yyyy年MM月dd日
* @isBirthday 判断输入的字符串是否是合法的生日 生日不能大于当前日期
* */
public static boolean isBirthday(String birthday)
//定义需要过滤的条件,可以将你期望的日期格式添加到数组中
String[] formats=
"yyyy-MM-dd",
"yyyyMMdd",
"MM-dd-yyyy",
"yyyy年MM月dd日"
;
/*
* 设置格式过滤器
*/
//记录传入的日期字符串,转换成日期类型
Date birth=null;
//判断格式是否正确,默认值为false
boolean isRight=false;
for(String f:formats)
try
birth =new SimpleDateFormat(f).parse(birthday);
//校验日期转换后是和传入的值不相同,说明日期传入有问题
//修正楼上提到的bug
if(!new SimpleDateFormat(f).format(birth).equals(birthday))
return false;
isRight=true;
break;
catch (ParseException e)
if(isRight)
//获取当前日期的毫秒数
long now =new Date().getTime();
//获取生日的毫秒数
long birthTime = birth.getTime();
//如果当前时间小于生日,生日不合法。反之合法
return birthTime<=now;
else
//输入的参数类型不是日期类型,或者类型和过滤中设置的类型不匹配
return false;
参考技术A 1、js页面判断
2、在后台截取下,看看是不是长度一样,前四位在某个范围内,mm是否是1-12之类的判断,字符串截取下 参考技术B 调用Date类进行转换,如果抛异常就是不合法的的日期格式。 参考技术C 使用正则表达式
日期格式:^\d4-\d1,2-\d1,2 参考技术D 可以再网上搜一下正则表达式
Linux脚本练习之script007-编写一个脚本,输入自己的生日时间(日期格式是:`YYYYMMDD`),计算还有多少天多少个小时是自己的生日。
script007
题目
编写一个脚本,输入自己的生日时间(日期格式是:YYYYMMDD
),计算还有多少天多少个小时是自己的生日。
分析
本题考查的知识点:
date
命令read
命令if...else
条件语句$(())
思路:
- 首先从键盘读取
YYYYMMDD
格式的生日日期。 - 校验输入的生日参数是否有效。
- 根据输入的生日日期得到月份和天,获取今年的年份,就可以得到今年的具体生日日期。
- 获取今年生日日期距离
1970-01-01 00:00:00
的秒数;获取目前时间距离1970-01-01 00:00:00
的秒数。 - 然后将两者进行求差运算,结果正是距离生日的秒数,如果是正数表示还没有到达生日,如果是负数则表示已经过了今年的生日。
- 将秒数转换成小时和天数后,最后打印输出。
脚本
#!/bin/bash
####################################
#
# 功能:编写一个脚本,输入自己的生日时间(日期格式是:YYYYMMDD),计算还有多少天多少个小时是自己的生日。
#
# 使用:直接执行,不需要任何参数
#
####################################
# 从键盘输入自己的生日
read -p "请输入自己的生日(YYYYMMDD):" birthday
# 校验输入的生日是否符合要求的格式
echo "$birthday" | egrep "[0-9]8"
if [ $? -ne 0 ]; then
echo "请输入符合指定格式的生日!"
exit
fi
# 获取今年的年份
y=$(date "+%y")
# 获取生日所在月份
m=$(date --date="$birthday" "+%m")
# 获取生日所在日
d=$(date --date="$birthday" "+%d")
# 获取今年生日距 1970-01-01 00:00:00 的秒数
bir_s=$(date --date="$y$m$d" "+%s")
# 计算当前时间距 1970-01-01 00:00:00 的秒数
now_s=$(date "+%s")
# 计算生日与当前时间相差的秒数
bir_now_s=$(($bir_s-$now_s))
# 把两者相减得到的差(秒)转换成天数
bir_d=$(($bir_now_s/60/60/24))
# 转换小时数
bir_h=$(($bir_now_s/60/60))
# 如果$bir_now_s值大于等于0的话,就输出“你还有多少天、多少个小时过生日”
if [ "$bir_now_s" -ge 0 ];then
echo "还有 $bir_d 天、$bir_h 小时是你的生日!"
# 如果$bir_now_s值小于0的话,就输出“你已经过了多少天、多少个小时生日”
elif [ "$bir_now_s" -lt 0 ];then
echo "你的生日已经过去 $((-1*$bir_d)) 天、$((-1*$bir_h)) 小时了!"
fi
测试
执行 ./script007.sh
调用脚本,然后输入 YYYYMMDD
格式的生日日期。
以上是关于java如何对生日(yyyymmdd)进行合法性判断?的主要内容,如果未能解决你的问题,请参考以下文章
如何把yyyy-mm-dd日期格式转化成yyyymmdd格式