斯潘8
斯潘4
好问题。您可以使用统计计算器很容易地找到最大和最小时间,首先将时间转换为FME时间格式,使用日期时间转换器:
然后应用statisticscalculator并使用第二个datetimeconverter将结果转换回。
在最短和最长时间内都可以。
然而...这在平均时间内是行不通的。因为小时有60分钟,不是100。例如,如果我有13:45和14:25,那么平均值是13:85。DateTimeConverter可以很容易地处理溢出,但它返回14:25(因为状态计算器在13.99时滚动,不是13.59)。
所以,如果你真的需要平均值,这需要做更多的工作。您需要使用DateTimeConverter只获取分钟数(%m),然后使用ExpressionEvaluator将其转换为一小时的零头。然后把它加回到小时(作为一个分数),并在上面使用统计量计算器。
所以13:45变成13+(45/60)=13.75,14:25变成14+(25/60)=14.412,平均14.081
现在你需要提取.081,乘以60得到分钟,把它补回小时,包括四舍五入和加前导零:
所以平均值=14:(0.081*60)=14:05
简而言之,最大值和最小值非常简单。平均值更复杂。除非其他人能想出一个更简单的方法…
[编辑:datetimeconverter,不是日期时间计算器]
或者只用TCL时钟扫描,格式等。直接为您省去一些麻烦..;)
(不管怎样,FME使用它作为时间函数,不是吗?)
也,在分钟版本中,您不需要填充,只需将格式正确指定为%m。(2位数分钟)
钻研
https://www.tcl.tk/man/tcl/tclcmd/clock.htm(时钟)成为时间的主人。
平均计算仍需要2次时间转换。
你可以做一些有趣的事情,比如“一个季度的第一个星期日”
(@fmod([expr[clock format[clock scan“today”]-格式%m]-1],3)==0)&&([clock format[clock scan“today”]-格式%w]==0)&&
([时钟格式[expr[时钟扫描“今天”]-604800]-格式%m]!=[时钟格式[时钟扫描“今日”]-格式%m])
我把它命名为“季度的第一个星期日”(荷兰语就是这样),然后测试它是否等于1。
当然,604800是一周。
(我将它用作工作台中的调度项。每个星期天都由Winsched运行,因为我不知道如何用Winsched或Winbat解决这个问题)
谢谢你到目前为止的帮助。我要把时间转换成秒((hh*3600)+(mm*60)+ss)
但是我在使用统计计算器时遇到了一些问题——这是一个简单的部分。
这是我的虚拟数据。当我通过统计计算器运行它时,我得到
另一个想法。如果您将时间视为特定日期/时间(例如2018—10-10)可以将它们转换为包含相同偏移量的epoch(1970-01-01 00:00:00)以来的秒数。然后您可以使用统计计算器计算所需的统计数据,然后将结果重新格式化为“%h:%m”。
假设一个名为“我的时间”的属性存储一个格式为“%h:%m”的时间值,此表达式将其转换为自纪元以来的秒数。
@datetimeformat(@datetimeparse(20181010@值(我的时间),%y%m%d%h:%m),%es)
在计算统计数据之后,此表达式将结果重新格式化为“%h:%m”。
@datetimeformat(@datetimeparse(@currentAttribute(),%es),%h:%m)
请参阅此处了解有关FME日期/时间功能的更多信息:日期/时间函数
请注意,“中间值”不同于“平均值(平均值)”。建议您确定哪一个(或两者都是?)是必需的。
@值(列表0):@padleft(@round(@evaluate((0.@值(列表)*60)),0),2,0)你也可能想消磨时间,如果最初是那样的话(所以01:45和02:25平均到02:05)
?2019安全亚搏在线软件公司|合法的