威纶通官方论坛

获取当前时刻, 计算并返回时间戳

[复制链接]
发表于 昨天 10:25 | 显示全部楼层 |阅读模式

// ==========================================================================
// 获取当前时刻, 并计算时间戳(起点:UT8-2000.01.01 00:00:00)
// ==========================================================================
sub int GetTimeStamp()      

//  bool  ON = true, OFF = false
//        unsigned short  MonDat[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    unsigned short  LcDat[6], MonDat[13]={00, 31, 59, 90,120,151,181,212,243,273,304,334,365}
    unsigned int    tps, tpa, tpb, tpc, tpd

//        tmStamp = 757382400                          //TEST:24.01.01 00:00:00
// ==========================================================================
    GetData(LcDat[0], "Local HMI", LW, 9017, 6)  //_读当前时刻
    tpa = LcDat[5] -2000                         //年(时间戳计算)
    tpb = LcDat[4] -1                            //月
    tpc = LcDat[2]                               //时
   
    tpd = tpa*1461/4 + MonDat[tpb] +LcDat[3] -1  //经历天数统计(含闰年)
    if  tpa %4 <> 0 or tpb >=2 then              //闰年补天修正
        tpd = tpd +1
    end if

    tpc = tpc*3600 +LcDat[1]*60 +LcDat[0]        //不足一天的总秒统计
    tps = tpd*86400 + tpc                        //秒计时间戳 TimeStamp of Sec
// ==========================================================================
    return  tps

end sub
 楼主| 发表于 昨天 10:32 | 显示全部楼层
// ==========================================================================
// 由给定的时间戳转换为对应的时间日历(起点:UT8-2000.01.01 00:00:00)
// ==========================================================================
sub bool Moment_Time(int tmStamp, short xYY, short xMM, short xDD, short xHH, short xMN, short xSS)

    bool  ONX = true, OFF = false
//        unsigned short  MonDat[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    unsigned short  tpi, MonDat[13]={00, 31, 59, 90,120,151,181,212,243,273,304,334,365}
    unsigned int    tps, tpd, tpx, tpy

//        tmStamp = 757382400               //TEST:24.01.01 00:00:00
// ==========================================================================
    tps = tmStamp %86400              //不满一天剩余的秒数
    tpd = tmStamp /86400              //经历的天数
    tpy = tpd *4/1461                 //年:年数必须小于100年
    tpx = tpd -tpy*1461/4             //不满一年剩余的天数
   
    if  tpx >= 335  then              //时间戳 异常
        return  OFF
    end if

    tpi=0
    while  MonDat[tpi] < tpx          //月份检索
        tpi = tpi +1
    wend
    if  tpy %4 <> 0 or tpx >=60 then  //修正闰年补天
        tpx = tpx -1
    end if

    xYY  = 2000 +tpy            //获取 年
    xMM  = tpi                  //获取 月
   
    tpi = tpi -1
    xDD  = tpx -MonDat[tpi] +1  //获取 日:不满一月剩余的天数 +1
    xHH  = tps /3600            //获取 时
    xMN  = tps %3600/60         //获取 分
    xSS  = tps %60              //获取 秒

// ==========================================================================
    return  ONX

end sub

这个子函数的定义有问题,无法回传时间日历的结果,
求教子函数的多变量回传方法或数组的回传方法
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

Archiver|小黑屋|威纶通官网 ( 粤ICP备06054553号 )

GMT+8, 2026-3-1 05:47

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表