寫一個可以接受的日期作爲自變量的小的C程序並填充struct tm結構。然後使用標準C庫例程格式化日期,並將其與輸入日期字符串進行比較。
#include <time.h>
main(int argc, char *argv[])
{
struct tm tmx, *tm2;
char tmbuf[9];
time_t timet;
if (argc < 1)
exit(2);
tmx.tm_sec = tmx.tm_min = tmx.tm_hour = tmx.tm_mday = tmx.tm_mon =
tmx.tm_year = tmx.tm_wday = tmx.tm_yday = tmx.tm_isdst = 0;
tmx.tm_mon = (argv[1][0] - '0') * 10 + argv[1][1] - '0' - 1;
tmx.tm_mday = (argv[1][2] - '0') * 10 + argv[1][3] - '0';
tmx.tm_year = atoi(&argv[1][4]) - 1900;
if ((timet = mktime(&tmx)) != (time_t)-1) {
tm2 = localtime(&timet);
strftime(tmbuf, sizeof(tmbuf), "%m%d%Y", tm2);
if (strcmp(argv[1], tmbuf) == 0)
exit(0);
}
exit(1);
}
/*
cc valdate.c -o valdate
*/
如果C庫日期格式的字符串不等於輸入字符串,日期是 無效,C程序將與1狀態退出,否則的日期是有效的, 和退出狀態爲0. 然後shell腳本使用C程序驗證日期。
echo "Please enter the date you want (e.g. MMDDYYYY)"
read date
if valdate "$date"; then
echo "Bad date ($date), please re-enter"
fi
你需要在ksh中完成嗎?執行如下操作很常見:if echo「$ TEXT」| perl -pe'測試並退出1';然後echo $ TEXT通過測試; fi在哪裏測試是對字符串的一些有用的測試。 – 2009-09-04 14:21:17
我敢肯定有不止一種方法來剝皮這隻貓。你有perl中的一行正則表達式的例子嗎? – jjclarkson 2009-09-04 14:37:22
這取決於 - 你關心閏年? – Beta 2009-09-04 15:30:10