免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11890 | 回复: 17
打印 上一主题 下一主题

计算闰年的代码  关闭 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-06 19:44 |只看该作者 |倒序浏览
在与日期有关的计算中往往需要知道某年是否为闰年,这里提供两种代码供大家选择使用(输出0表示非闰年,1表示闰年):
1:shell方法
  1. echo  $((y%4==0&&y%100!=0||y%400==0))
  2. 举例
  3. y=2000
  4. echo  $((y%4==0&&y%100!=0||y%400==0))
  5. 1
  6. y=2001
  7. echo  $((y%4==0&&y%100!=0||y%400==0))
  8. 0
复制代码


2:awk方法
  1. echo $y | awk '{print ($1%4==0 && $1%100!=0 || $1%400==0)}'
  2. 举例
  3. y=2000
  4. echo $y | awk '{print ($1%4==0 && $1%100!=0 || $1%400==0)}'
  5. 1
  6. y=2001
  7. echo $y | awk '{print ($1%4==0 && $1%100!=0 || $1%400==0)}'
  8. 0
复制代码

论坛徽章:
0
2 [报告]
发表于 2003-12-06 23:07 |只看该作者

计算闰年的代码

收藏,有用..........

论坛徽章:
0
3 [报告]
发表于 2003-12-06 23:16 |只看该作者

计算闰年的代码

第一种方法好象很简单,第二种就是高手了。

论坛徽章:
0
4 [报告]
发表于 2003-12-06 23:32 |只看该作者

计算闰年的代码

[quote]原帖由 "wstommy"]第一种方法好象很简单,第二种就是高手了。[/quote 发表:

AD本来就是高手!

论坛徽章:
0
5 [报告]
发表于 2003-12-06 23:48 |只看该作者

计算闰年的代码

$((y%4==0))&&((y%100!=0))||((y%400==0)) 前面干吗要$ ?不加不是BOOL型的了吗?

论坛徽章:
0
6 [报告]
发表于 2003-12-07 00:17 |只看该作者

计算闰年的代码

变量y

论坛徽章:
0
7 [报告]
发表于 2003-12-07 00:25 |只看该作者

计算闰年的代码

是不是写错了,应该是
--------------------------------------------------------------------------------

(($y%4==0))&&(($y%100!=0))||(($y%400==0))  
???????????

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-12-07 07:22 |只看该作者

计算闰年的代码

原帖由 "wstommy" 发表:
是不是写错了,应该是
(($y%4==0))&&(($y%100!=0))||(($y%400==0))  
???????????

试一下不就知道了?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-12-07 08:02 |只看该作者

计算闰年的代码

应用举例:
计算公元以来共有几个闰年,他们是(为了显示美观,不足四位的年份前面用“0”补足四位)?
awk版
  1. cat leap.awk
  2. #!/usr/bin/awk -f
  3. #ScriptName:leap.awk
  4. BEGIN{printf"公元0-2003年闰年是:\n"}
  5. {
  6.     for(i=0;i<2004;i++)
  7.     if((i%4==0 && i%100!=0 || i%400==0)) {
  8.         j++
  9.         if(j%15==0){
  10.                 printf"%04d\n",i}else{printf"%04d ",i
  11.         }
  12.     }
  13.     printf"\n公元0--2003年共有闰年%d次\n",j
  14. }
复制代码
  1. echo|awk -f leap.awk
  2. 公元0-2003年闰年是:
  3. 0000 0004 0008 0012 0016 0020 0024 0028 0032 0036 0040 0044 0048 0052 0056
  4. 0060 0064 0068 0072 0076 0080 0084 0088 0092 0096 0104 0108 0112 0116 0120
  5. 0124 0128 0132 0136 0140 0144 0148 0152 0156 0160 0164 0168 0172 0176 0180
  6. 0184 0188 0192 0196 0204 0208 0212 0216 0220 0224 0228 0232 0236 0240 0244
  7. 0248 0252 0256 0260 0264 0268 0272 0276 0280 0284 0288 0292 0296 0304 0308
  8. 0312 0316 0320 0324 0328 0332 0336 0340 0344 0348 0352 0356 0360 0364 0368
  9. 0372 0376 0380 0384 0388 0392 0396 0400 0404 0408 0412 0416 0420 0424 0428
  10. 0432 0436 0440 0444 0448 0452 0456 0460 0464 0468 0472 0476 0480 0484 0488
  11. 0492 0496 0504 0508 0512 0516 0520 0524 0528 0532 0536 0540 0544 0548 0552
  12. 0556 0560 0564 0568 0572 0576 0580 0584 0588 0592 0596 0604 0608 0612 0616
  13. 0620 0624 0628 0632 0636 0640 0644 0648 0652 0656 0660 0664 0668 0672 0676
  14. 0680 0684 0688 0692 0696 0704 0708 0712 0716 0720 0724 0728 0732 0736 0740
  15. 0744 0748 0752 0756 0760 0764 0768 0772 0776 0780 0784 0788 0792 0796 0800
  16. 0804 0808 0812 0816 0820 0824 0828 0832 0836 0840 0844 0848 0852 0856 0860
  17. 0864 0868 0872 0876 0880 0884 0888 0892 0896 0904 0908 0912 0916 0920 0924
  18. 0928 0932 0936 0940 0944 0948 0952 0956 0960 0964 0968 0972 0976 0980 0984
  19. 0988 0992 0996 1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048
  20. 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1104 1108 1112
  21. 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172
  22. 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232
  23. 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292
  24. 1296 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356
  25. 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1404 1408 1412 1416 1420
  26. 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480
  27. 1484 1488 1492 1496 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544
  28. 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604
  29. 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664
  30. 1668 1672 1676 1680 1684 1688 1692 1696 1704 1708 1712 1716 1720 1724 1728
  31. 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788
  32. 1792 1796 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852
  33. 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1904 1908 1912 1916
  34. 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976
  35. 1980 1984 1988 1992 1996 2000
  36. 公元0--2003年共有闰年486次
复制代码

shell版(ksh)
  1. cat leap.ksh
  2. #!/bin/ksh
  3. #ScriptName:leap.ksh
  4. printf "公元0-2003年闰年是:\n"
  5. y=0;j=0
  6. while [ $y -lt 2004 ]
  7. do
  8. if ((y%4==0 && y%100!=0 || y%400==0))
  9. then
  10.         ((j=j+1))
  11.         if ((j%15==0))
  12.         then   printf "%04d\n" $y
  13.         else    printf "%04d " $y
  14.         fi
  15. fi
  16. ((y=y+1))
  17. done
  18. printf "\n公元0--2003年共有闰年%d次\n" $j
复制代码
  1. 测试(略)
  2. leap.ksh
  3. 公元0-2003年闰年是:
  4. 0000 0004 0008 0012 0016 0020 0024 0028 0032 0036 0040 0044 0048 0052 0056
  5. 0060 0064 0068 0072 0076 0080 0084 0088 0092 0096 0104 0108 0112 0116 0120
  6. .
  7. .
  8. .
  9. 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976
  10. 1980 1984 1988 1992 1996 2000
  11. 公元0--2003年共有闰年486次
复制代码

论坛徽章:
0
10 [报告]
发表于 2003-12-07 11:45 |只看该作者

计算闰年的代码

echo  $((y%4==0))&&((y%100!=0))||((y%400==0))

LINUX下通过,SCO下错误,为什么会这样啊?大大不能解释清楚吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP