| 
 
	积分1965贡献 精华在线时间 小时注册时间2014-4-13最后登录1970-1-1 
 | 
 
| 
被封在家,无聊摆弄GrADS,出图的时候想不起来怎么查询当前时间并将其设置为标题,于是搞出了这个计算预报时间的东西。
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 
 
 测试内容如下复制代码* 是否闰年。是的话返回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
 | 
 |