当前位置:首页 >> 电子/电路 >>

Labview中如何计算两个不同日期的时间差


Labview 中如何计算两个不同日期的时间差
一、绝对时间和相对时间 数值控件、 时间标识、 格式化字符串、 波形图、 波形图表等控件均可以设置为时间格式, 设置为时间时要求我们选择“绝对时间”或者“相对时间”。所以我们有必要搞清楚什么是“绝 对时间”和“相对时间”。 从 0 时刻开始计时的时间称作绝对时间, 我们通常说的“系统时间和日期”指的就是绝对 时间。 “相对时间”在其它编程语言中, 称作“时间跨度”, 相对时间并不关注开始计时的时刻, 相对时间关注的是两个绝对时间的差值,比如秒数百米赛跑用时几秒,用的就是相对时间。 绝对时间可以用年、月、星期、日、时、分、秒、小数秒来表示,但是相对时间是用日、 时、分、秒、小数秒来表示的,这与我们日常的习惯是有很大区别的。在日常生活中,我们 经常说两年过去,几个月过去了,这样的说法实际上是不精确的。因为每年的天数是不固定 的,每个月的天数也是不固定的,因此无法用年和月表示准确的相对时间。只有星期、天、 时、分、秒是准确的,每小时为 3600 秒在任何情况下都是成立的,而年、月与秒之间是无 法直接转换的。 二、0 时刻 当我们从控件选板中建一个新的控件时, 控件此时的值为默认值。 数值型控件的默认值 如果没有重新设置,一般是 0。时间标识作为特殊的数值控件,当我们新创建时,时间标识 控件的默认值是什么?

从上图可以看出, 新创建的时间标识的默认值实际上也是 0.从控件上看, 数值 0 对应的 时间为 0,日期不显示。下面我们修改当前时间控件,把时间修改成 8 点零 1 秒。

从上图可以看出,LABVIEW 中的时间都是从 1904 年 1 月 1 日 8 点开始计算的,这个时 间就是 0 时刻。 我们计算时间时实际上计算的是从此刻开始经历的秒数。 经历过的秒数可以 是负数,表示此时计算的时间在 0 时刻之前。 回过头来再看看帮助文件是如何定义的: LabVIEW 将时间标识保存为一个含四个整数的簇,其中前两个带符号整数(64 位二进 制)表示自 1904 年 1 月 1 日周五凌晨[01-01-1904 00:00:00]以来无时区影响的所有秒数。后 两个不带符号整数(64 位二进制)表示小数秒部分。 帮助文件中定义的和我们图中演示的是不同的, 原因在于我们使用的时间是包括时区的, 世界各地的所在的时区是不同的, 因此定义的 0 时刻是无时区影响的。 无时区影响的时间日 期,LABVIEW 中称作“通用时间”。由于我们所使用的计算机操作系统中的时间日期是包括时 区的,所以只有非常特别的场合才会涉及到“通用时间”,绝大多数场合谈到的都是“绝对时 间”和“相对时间。 三、时间标志的内存映射 Labview 提供了非常丰富的时间操作函数。Labview8.2 版本后又提出了新的有关时间的 数据类型,时间标识(TIMESTAMP) 。时间标识早期通常翻译成“时间戳”,实际上是一种改进 型的数值控件, 从时间标识控件所在的控件选板就可以初步判断出, 时间标识就是特殊的数 值控件。

要想真正了解一种数据类型, 首要的问题是要搞清楚该数据类型在内存中或者文件中是 如何存储的。我们知道数值型控件可以选择控件所包含的数据类型,比如双精度浮点数、整 型数、 32 位整型数、 16 位整型数等等。 时间标识控件是不允许选择它所包含的数据类型的, 这说明时间标识所包含的数据类型是固定的。 从帮助文件中, 我们可以找到时间标识在内存 中的存储方式--映射。 LabVIEW 将时间标识保存为一个含四个整数的簇,其中前两个带符号整数(64 位二进 制)表示自 1904 年 1 月 1 日周五凌晨[01-01-1904 00:00:00]以来无时区影响的所有秒数。后 两个不带符号整数(64 位二进制)表示小数秒部分。

Labview 利用 16 个字节(128 位)表示时间信息,其中前 8 个字节(64 位)由两个 I32 构成,表示从 0 时刻开始经历过的秒数。后面 8 个字节为 U64 数据,表示秒的小数部分。 四、时间标识与双精度数之间的相互转换 在时间标识出现以前, 经常用双精度数表示从 0 时刻经历过的秒数。 我们知道双精度数 所占的内存空间也是 8 个字节,与时间标识相同。但是时间标识实际上是定点数,它的小数 点位置是确定的,因此实际上双精度数表示时间与时间标识相比,不如时间标识精确。 采用数值转换函数就可以实现时间标识和双精度数之间的相互转换,如下图所示:

五、强制转换时间标识至数值 既然我们已经知道了时间标识在内存中的存储方式, 我们自然就可以通过强制转换函数 分解出时间标识的两个组成部分,秒和秒的小数部分。 因为时间标识占有 8 个字节的内存空间, 并分成前后各 4 个字节, 因此可以创建一个簇 或者数组来表示它, 下面的例子创建一个簇, 包含 3 个元素。 前两个元素表示秒的整数部分, 第 3 个元素表示秒的小数部分。

从上图可以看出,秒的整数部分非常明显。小数部分就不容易分辨出来了,这要非常了 解浮点数的二进制表示方式才可以。 小数部分虽然有 4 个字节(64 位)构成,但是实际上只有前 8 位(一个字节)会发生 变化,这也说明了“获取时间日期(秒)”函数所能达到的最高精度是 1/256 秒。小数部分的 HEX 进制 0X60 是如何对应 0.375 秒的那? 0X60 用二进制表示为: 0110 0000, 所以它表示的小数为: 0*0.5+1*0.25+1*0.125+…=0.375 六、两个时间值的差值计算 我们经常会遇到给定两个日期,计算两个日期所经历过的天数、小时数、秒数等等,通 常给定的日期的格式为字符串,比如某年、某月、某日等等。如果按照通常的思维方式考虑 这个问题,将会非常复杂,因为年份涉及到闰年的问题,月份涉及到闰月的问题。 如果我们非常了解 LABVIEW 的时间概念,这个问题非常容易解决了。在 LABVIEW 中所 有的时间日期都可以转换为秒数, 这个秒数相对于某个标准的 0 点 (即 0 秒所代表的时间) 。 对于两个具体日期时间的差值, 实际上就是相对于这个 0 点的秒数的差值, 因此计算日期差 值时根本不需要考虑闰年、闰月的问题。 因为 LABVIEW 的 TIMESTAP 是 LABVIEW 专门用于表示时间的控件, 因此不需要使用字符 串等其它数据格式。 下面一个程序框图详细说明如何计算两个时间的差值问题: 看到一个网 友在社区中发布了一个求助: 2005.5.26 2007.8.30 如何计算两者之间的天数?现在我用下面 的框图回答一下。

也就是说,时间是按照秒来计算的,最好转成天数就可以。


赞助商链接
相关文章:
LABVIEW的编程技巧之如何比较系统时间
labview编程技巧---字... 1页 1下载券 labView中如何获取windo... 2页 1下载...日前在论坛上看到网友的一个帖子,内容是比较当前时间是否在 22:00:00 和 05...
Labview实时显示系统时间
需要从采集时计时, 可使用相对时间,此时 X 坐标将不显示日期,只显示当前时间。...1/2 相关文档推荐 MFC中实时显示系统时间 3页 免费 labView中如何获取windo.....
labviEW 实验二(2)
LabVIEW实验二 1页 1下载券喜欢此文档的还喜欢 LabVIEW...VI,计算生成等于某个给定值的随机数所需要的时间。...个公式使用同一个公式节点,并在同一个图表中显 示...
基于Labview的时间间隔计数器SR620远程控制
【关键词】SR620;Labview;时间频率;时间间隔 一、引言 SR620 是美国 Stanford System 公司生产的一种时间间隔计数器,由于其精度,准确度高, 在时间频率测量系统中...
labview经典练习题附答案_图文
题目:用 labview 写一个获取当前系统时间的程序。 ...产生函数仿真两个频率较接近但幅值相差较大的正弦波,...将昨天的练习 改为实时写入表单文件,添加 一列日期...
用LabVIEW8.6自制一个获取系统当前时间的应用程序
用LabVIEW8.6自制一个获取系统当前时间的应用程序_计算机软件及应用_IT/计算机_专业...LabVIEW 中应用程序的生成。 2. 桌面图标的制作(包括图片处理) 。 3. 控件...
labview课程设计—连续时间系统的时域分析
2.2 利用 Labview 编程完成习题设计 1. 写一个类正弦波发生器,要求频率和幅度...写一个 VI 获取当前系统时间, 并将其转换为字符串和浮点数。 这在实际编程中...
labview之时间-转自陈老师博客
两个不带符号整数(64 位二进制)表示小数秒部分...一个字节) 会发生变化, 这也说明了“获取时间日期...从上图可以看出,LABVIEW 中的时间都是从 1904 年 ...
labview怎么获取windows的时间并显示
labview怎么获取windows的时间并显示_计算机软件及应用_IT/计算机_专业资料。...labview 怎么获取 windows 时间并显示 1 整个程序 2、步骤 获取时间 转换成字符...
labview虚拟仪器——数字时钟
labview虚拟仪器——数字时钟_信息与通信_工程科技_专业...(2) 利用获取日期/时间(秒) (函数)、 截取字符...这使我深刻体会到:同样的问题,可能有不同 的解决...
更多相关标签: