- 积分
- 1965
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-4-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
被封在家,无聊摆弄GrADS,出图的时候想不起来怎么查询当前时间并将其设置为标题,于是搞出了这个计算预报时间的东西。
- * 是否闰年。是的话返回1,不是的话返回0;然后在计算2月的日数的时候直接加就好
- function isLeapYear(y)
- if ( math_mod(y, 4) != 0)
- return 0
- else
- if (math_mod(y, 100) = 0)
- return 0
- else
- if (math_mod(y, 400) = 0)
- return 1
- endif
- endif
- return 1
- endif
- * 计算本月多少天。y为年份,m为月份
- function getMonthDays(y, m)
- i = 1
- while (i<=12)
- mon.i = 31
- i = i + 1
- endwhile
- mon.2 = 28 + isLeapYear(y)
- mon.4 = 30
- mon.6 = 30
- mon.9 = 30
- mon.11 = 30
- m = m + 0
- return mon.m
- * 计算时间。sdate为起报时间YYYYMMDDHH;period为预报时效,单位为小时
- function calcDate(sdate, period)
- y = substr(sdate, 1, 4)
- m = substr(sdate, 5, 2)
- d = substr(sdate, 7, 2)
- h = substr(sdate, 9, 2)
- y = y + 0
- m = m + 0
- d = d + 0
- h = h + period
- while (h>=24)
- h = h - 24
- d = d + 1
- if (d > getMonthDays(y,m))
- d = 1
- m = m + 1
- if (m>12)
- m = 1
- y = y + 1
- endif
- endif
- endwhile
-
- ret = y
- if (m<10)
- ret = ret % '0' % m
- else
- ret = ret % m
- endif
- if (d<10)
- ret = ret % '0' % d
- else
- ret = ret % d
- endif
- if (h<10)
- ret = ret % '0' % h
- else
- ret = ret % h
- endif
- return ret
复制代码 测试内容如下
- say calcDate('2020072412', 2)
- say calcDate('2020073112', 24)
- say calcDate('2020022812', 24)
- say calcDate('2020022812', 48)
- say calcDate('2020022812', 72)
- say calcDate('2021022812', 24)
- say calcDate('2021022812', 48)
- say calcDate('2021022812', 72)
复制代码 测试结果为
- 2020072414
- 2020080112
- 2020022912
- 2020030112
- 2020030212
- 2021030112
- 2021030212
- 2021030312
复制代码 (目前看着暂时没发现问题……如果用着的时候发现问题再说)
|
|