我现在要做一个自动打印报表的功能,每次自动打的都是一天的数据,也即当前时间的前一天到当前时间的这段时间的数据。获取当前时间我知道可以通过在变量管理里面建立系统信息,然后获取年、月、日、小时、分钟、秒,这些信息,但是我如何获得当前日的前一日呢,直接减一肯定是不行的。因为要考虑到闰年,每个月的天数也不同,可否直接调用什么函数可以来计算呢
我的脚本如下:
SYSTEMTIME From()
{
#pragma code("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSytemTime);
#pragma code()
SYSTEMTIME st;
st.wYear=GetTagWord("year");
st.wMonth=GetTagWord("month");
st.wDay=GetTagWord("day");
st.wHour=GetTagWord("hour");
st.wMinute=GetTagWord("minute");
st.wSecond=GetTagWord("second");
return st;
}
SYSTEMTIME To()
{
#pragma code("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSytemTime);
#pragma code()
SYSTEMTIME st;
st.wYear=GetTagWord("year");
st.wMonth=GetTagWord("month");
st.wDay=GetTagWord("day")-1;
st.wHour=GetTagWord("hour");
st.wMinute=GetTagWord("minute");
st.wSecond=GetTagWord("second");
return st;
}
希望大家能给我帮助,非常感谢!
最佳答案
C脚本处理日期的确是个麻烦事哦,呵呵。帮你改造一下:
SYSTEMTIME From()
{
#pragma code("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSytemTime);
#pragma code()
SYSTEMTIME st;
GetLocalTime(&st);
return st;
}
SYSTEMTIME To()
{
//**********************************
typedef struct
{
int tmsec;
int tmmin;
int tmhour;
int tmmday;
int tmmon;
int tmyear;
int tmwday;
int tmyday;
int tmisdst;
}tm;
//**********************************
SYSTEMTIME st;
time_t yest;
tm *tm1;
yest = time(NULL) - (time_t)(60*60*24);
tm1 = gmtime(&yest);
st.wYear=tm1->tmyear;
st.wMonth=tm1->tmmon;
st.wDay=tm1->tmmday;
st.wHour=tm1->tmhour;
st.wMinute=tm1->tmmin;
st.wSecond=tm1->tmsec;
return st;
}
另外如果是想做动态时间报表打印的话,对于WinCC V6.0 SP3版本起用不着这么麻烦,WinCC支持用变量进行动态化,脚本只需要控制变量就可以实现动态打印,VBS脚本就派上用场了,呵呵。详情请参考:
WinCC 信息系统>>使用WinCC>>创建页面布局>>使用对象>>使用运行系统文档的对象>>如何改变“变量记录表”的输出选项
提问者对于答案的评价:
其实大家说得都很好!非常感谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc271040.html