日前在论坛上看到网友的一个帖子,内容是比较当时时刻是否在22:00:00和05:00:00之间,从字面上看 05:00:00应该是第二天清晨。网友的比较办法是把时刻上下限和当时时刻转化为字符串,然后进行比较,下面是他的程序框图,由于在逻辑上存在问题,所以引起了火热的评论。
获取体系时刻使得时刻在22:00:00之后到5:00:00之前灯亮,可是其他时刻都对的,为什么在0:00:00~2:00:00之间就不对呢?
似乎是4:59:59那里的冒号是运用了中文输入法的冒号,而那个节点输出的时分是运用英文输入法下的冒号的,所以比较时就出错了。
不是的,那个只需时刻小于2比如说1:10:50,由于它的第一个数字比2小,输出就不对
后边还有一些相关的回复就不摘录了,评论到后来一位网友提出了定见“感觉这个思路不是很好”
我个人以为这位网友的观点是对的,咱们知道字符串是逐一字符比较的,它实际上比较的是字符的ASCII值。“5”和“22”进行字符串比较,那么5>22,由于5>2,这对数字比较来说是不符合逻辑的。
LV中的时刻自身是数值,任何编程言语都会界说一个0时刻,当时时刻为从那个0时刻开端后通过的秒数。LV作为面向工程实践的编程言语,有关时刻操作函数十分丰富,因而运用“数值”比较更简单了解、不简单产生过错。
咱们知道,现在LV有三种不同的方法表明时刻,三者之间能够自在转化:
1、直接运用秒,自0时刻开端经历过的秒数。
上图所示的便是LV界说的0时刻时刻,这个时刻是时区相关的。
2、时刻标识符,时刻标识符可能是在LV8.0之后才呈现的,是LV专门为时刻操作供给的新的控件,如上图所示。其时刻精度比直接运用秒数要高。
3、时刻簇表明。时刻簇表明是咱们最为常用的时刻表明法,簇的数据结构如下图所示:
回过头来看看网友所提的问题,他的意图是要看看当时体系时刻是否在上上下限规模之内。当时体系时刻很简单取得,问题是怎么获取上下限的问题。看看下面的程序框图。
上面的程序框图中,有两个重要的技巧,如赤色箭头所示。
1、年、月、日、小时能够是相对时刻,没有约束,咱们不必考虑24小时,31天等等,LV会主动进行转化。上图中22+7=29,超越24小时后,LV主动调整天数。
2、判别规模并强制转化函数能够直接运用时刻标识符作为输入参数。
咱们知道,时刻标识符能够直接转化为秒数,更为重要的是时刻标识符能够直接和数值进行加减运算,没有数值单位时默以为秒,因而上面的程序框图能够简化为:
我从前介绍过时刻标识符能够直接带着单位进行加减运算,因而上述程序框图能够简化为:
留意赤色箭头部分,h表明小时,这样就不需求乘以3600,转化为秒了,关于时刻比较十分便利。