Groovy:从字符串计算的Timeduration-Subtraction
发布时间:2020-12-14 16:22:08 所属栏目:大数据 来源:网络整理
导读:我的脚本从文件中读取一个字符串,并将其评估为在TimeCategory中作为TimeDuration工作.如果字符串以“ – ”开头,则抛出异常. 我的简化脚本: import groovy.time.TimeCategory;String string = "-1.day"Date now = new Date()use(TimeCategory){ def x = new
我的脚本从文件中读取一个字符串,并将其评估为在TimeCategory中作为TimeDuration工作.如果字符串以“ – ”开头,则抛出异常.
我的简化脚本: import groovy.time.TimeCategory; String string = "-1.day" Date now = new Date() use(TimeCategory) { def x = new Date() + evaluate(string) println x } 抛出: groovy.lang.MissingMethodException: No signature of method: groovy.time.Duration.negative() is applicable for argument types: () values: [] Possible solutions: notify() 目前我的解决方案是: import groovy.time.TimeCategory; String string = "-1.day" Date now = new Date() use(TimeCategory) { def x if(string.startsWith("-")) { string = string.substring(1) x = now - evaluate(string) } else { x = now + evaluate(string) } println x } 它可以做到以下几点.但是……我不喜欢它.我不确定后果(它会用于不同的时间单位吗?“ – 1.day 2.hours-3.minutes”): String prestring = "-1.day" String string = "0.day$prestring" 有什么建议? 解决方法
问题是评估操作的顺序:
-1.day相当于 – (1.day),或(1.day).negative() 要解决此问题,您可以先应用括号来评估减号运算符: (-1天 另一种解决方案是在Duration类中添加negative()方法. Duration.metaClass.negative = { -> new Duration(-delegate.days,-delegate.hours,-delegate.minutes,-delegate.seconds,-delegate.millis) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |