【问题标题】:Groovy: Timeduration-SubtractionGroovy:时间减法
【发布时间】:2016-03-07 13:40:28
【问题描述】:

我正在 Groovy 中创建一个 csv,需要准备一些持续时间。我正在为该任务使用 TimeDuration。

Date start = Date.parse('dd.MM.yyyy hh:mm', 04.03.2016 14:30)
Date end   = Date.parse('dd.MM.yyyy hh:mm', 04.03.2016 23:30)
TimeDuration duration = TimeCategory.minus( end, start );
entry  << "${duration.hours}:${duration.minutes}";

一切都很好。现在我创建暂停持续时间:

TimeDuration pause;

if(duration.hours >=6 && duration.hours < 8){
  pause = new TimeDuration(0, 0, 30, 0, 0) ;
} else if ( duration.hours >= 8 ) {
  pause = new TimeDuration(0, 0, 45, 0, 0) ;
} else {
  pause = new TimeDuration(0, 0, 0, 0, 0) ;
}

entry  << "${pause.hours}:${pause.minutes}";
entry  << ";";

到目前为止一切都很好。现在我减去暂停以获得真正的工作时间:

// subtract pause from duration
TimeDuration workTime= duration.minus(pause);
entry  << "${workTime.hours}:${workTime.minutes}";
entry  << ";";

对于我的持续时间为 9 小时 00 分钟的情况,我的工作时间为 9 小时 -45 分钟

println entry; // 9:00;0:45;9:-45

我想要的工作时间是 8:15。

有什么提示吗?

【问题讨论】:

    标签: date groovy subtraction


    【解决方案1】:

    TimeDuration 不打算格式化。它只是一个类来保存一个持续时间并操纵这个持续时间。

    如果你想格式化这样的持续时间,你应该使用toMilliseconds()方法并格式化它。

    例如:

    entry  << new Date(workTime.toMilliseconds()).format("HH:mm:ss")
    

    【讨论】:

    • 感谢您的快速回答。我这样做了,现在得到了积极的分钟,但时间仍然是错误的:println entry; // 9:00;0:45;9:15
    • 不知道为什么,我完全复制了你的例子,最后得到“08:15:00”。见groovyconsole.appspot.com/script/5186766520713216
    • 嗨杰瑞米。你说的对。看来我的 IDE 有问题。我将我的代码复制到我的 IDE 并再次得到我的答案的结果。我会及时通知您问题所在。
    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 2013-11-17
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2018-12-21
    • 2016-09-21
    相关资源
    最近更新 更多