跪求代码:shell中判断输入的日期是否合法,格式为(yyyy-mm-dd)

zhaojingtt 2010-11-29 08:50:21
初学shell,现在需完成一个程序。判断输入的日期是否符合yyyy-mm-dd格式。
请各位大牛帮帮忙
...全文
2242 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39439965 2021-07-07
  • 打赏
  • 举报
回复

img

linsen_519 2010-11-30
  • 打赏
  • 举报
回复
马克~~ 并看看自己的头像
justkk 2010-11-30
  • 打赏
  • 举报
回复 1
#!/bin/ksh
vdate()
{
[[ "$1" = @([0-9][0-9][0-9][0-9])-@([0-9][0-9])-@([0-9][0-9]) ]] || { echo nn; return 1; }

integer yy mm dd
echo "$1" | IFS=- read yy mm dd
echo $mm $yy $dd
(cal $mm $yy | grep -q $dd && echo ok || echo fail) 2>&-
}

上面是一个检查日期是否合法的函数
lz可以自己验证一下
vdate 2010-01-02
vdate 2010-01-92
zhaojingtt 2010-11-30
  • 打赏
  • 举报
回复
谢谢啊。我就需要2010-09-09是合法的,2010-9-9是非法的。
我现在需要在输入日期不合法的情况下重复输入3次才退出,请大牛帮忙一下。万分感激啊。
steptodream 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhaojingtt 的回复:]

我是为了完成任务啊,最近工作忙死了,没有时间去研究这个,主要是刚接触不怎么懂,就想快点搞出来。

if echo $datestr | grep -Eq "[0-9]{4}-[0-9]{2}-[0-9]{2}" && date -d $datestr +%Y%m%d 2>/dev/null
这样写会输出日期,能不不要输出啊
[/Quote]
if echo $datestr |grep -Eq "[0-9]{4}-[0-9]{2}-[0-9]{2}" && date -d $datestr +%Y%m%d >/dev/null 2>&1

需要注意的是 现在月份和日期必须输入2位才合法 2010-9-9会认为不合法 要写成2010-09-09
如果你要2010-9-9也合法 那如下改写
if echo $datestr |grep -Eq "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" && date -d $datestr +%Y%m%d >/dev/null 2>&1
zhaojingtt 2010-11-30
  • 打赏
  • 举报
回复
我是为了完成任务啊,最近工作忙死了,没有时间去研究这个,主要是刚接触不怎么懂,就想快点搞出来。

if echo $datestr | grep -Eq "[0-9]{4}-[0-9]{2}-[0-9]{2}" && date -d $datestr +%Y%m%d 2>/dev/null
这样写会输出日期,能不不要输出啊

steptodream 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhaojingtt 的回复:]

if echo $datestr | grep -q "-" && date -d $datestr +%Y%m%d 2>/dev/null
这个不对啊,输入2010-12--1也是可以的,显然不合法啊
[/Quote]
那就改下咯 有问题 尝试自己去完善嘛
if echo $datestr | grep -Eq "[0-9]{4}-[0-9]{2}-[0-9]{2}" && date -d $datestr +%Y%m%d 2>/dev/null
zhaojingtt 2010-11-30
  • 打赏
  • 举报
回复
if echo $datestr | grep -q "-" && date -d $datestr +%Y%m%d 2>/dev/null
这个不对啊,输入2010-12--1也是可以的,显然不合法啊
zhaojingtt 2010-11-29
  • 打赏
  • 举报
回复
多谢多谢啊,我为这个愁了一天了。。。
steptodream 2010-11-29
  • 打赏
  • 举报
回复
对呀! 我那个就是判断格式对不对啊 日期是否合法啊
如果合法了 你就开始处理就行了啊!

if echo $datestr | grep -q "-" && date -d $datestr +%Y%m%d 2>/dev/null
then
这里说明日期已经合法了
分别去判断年也好 月也好 日期也好 在这里写代码就行了
else
echo "你输入的日期不合法"
fi
zhaojingtt 2010-11-29
  • 打赏
  • 举报
回复
谢谢啊。初学者,不怎么懂啊。
我的任务是判断是输入一个日期yyyy-mm-dd判断yyyy年的mm月有多少天,所以就得先判断输入的格式。
谢谢啊,我看shell才4天,所以很多地方都不懂,多多包含
steptodream 2010-11-29
  • 打赏
  • 举报
回复
2010-10-40
这是合法日期吗!明显不是!
steptodream 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhaojingtt 的回复:]

我需要判断yyyy,mm,dd是否是数字啊
[/Quote]
是数字就一定是合法的yyyy-mm-dd?!

我上面那个不但判断是不是yyyy-mm-dd格式 还会用date命令来判断数字是不是合法的日期!

你自己测试一下 好不好?
zhaojingtt 2010-11-29
  • 打赏
  • 举报
回复
我需要判断yyyy,mm,dd是否是数字啊
steptodream 2010-11-29
  • 打赏
  • 举报
回复
上面那个 如果不符合日期格式会输出错误信息 我们把错误信息屏蔽掉

if echo $datestr | grep -q "-" && date -d $datestr +%Y%m%d 2>/dev/null
then
"ok,the date format is yyyy-mm-dd"
fi
steptodream 2010-11-29
  • 打赏
  • 举报
回复
比如你存日期的字符串是datestr

if echo $datestr | grep -q "-" && date -d $datestr +%Y%m%d
then
"ok,the date format is yyyy-mm-dd"
fi

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧