java如何对生日(yyyymmdd)进行合法性判断?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何对生日(yyyymmdd)进行合法性判断?相关的知识,希望对你有一定的参考价值。

麻烦写下详细算法,谢谢!

修改你说的存在的bug
import 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)进行合法性判断?的主要内容,如果未能解决你的问题,请参考以下文章

Java判断字符串是否符合yyyyMMdd日期格式

如何将日期格式yyyymmdd

如何把yyyy-mm-dd日期格式转化成yyyymmdd格式

在excel中 如何快速吧日期格式ddmmyyyy改为yyyymmdd这种

c语言输入身份证输出生日,性别,并判断身份证是不是合法

用java语言创建一个日期类,使得该类能够对日期的合法性进行验证。