如何使用mysql在g​​roovy中存储持续时间

时间:2014-09-15 13:24:54

标签: mysql grails groovy

设置一个应用程序,使用groovy对呼叫日志进行一些报告。我想使用mysql是后台并将数据从外部上传到数据库(即每隔午夜运行一个加载今天调用的脚本) 我已经获得了mysql和groovy(有点)工作之间的联系,它清楚地验证了数据库,即使我不能提取或存储其中的任何数据。

但是,外部日志中的一个值是持续时间,通常格式为“00:05:42”(%H:%m:%s),但是,我有一些问题如何存储它在mysql中以一种groovy很满意的方式。首先尝试日期,但这给了我一个日历日期作为其中一部分的问题。 然后我开始尝试使用grovy.time。*中的TimeDuration。但是这似乎将事物存储为一个小小的事物。那么,是否有一个适用于mysql和groovy喜欢的Time版本(尝试了许多不同的版本,虽然mysql似乎很开心,groovy似乎不知道如何处理它。

此刻的域名如下:

import groovy.time.*
import java.sql.Time
import java.sql.Timestamp



class Calls {
    Time CallTime
    TimeDuration Length
    int Line
    String SourceNr
    String Direction
    String DialNr
    String Phone
    String User
    static constraints = {
    }
    static mapping = {
        version false
    }
//      id generator: 'hilo',
//      params: [table: 'hi_value', column: 'next_value', max_lo: 100]
        //id composite: ['DateTime', 'SourceNr','DialNr']

}

1 个答案:

答案 0 :(得分:1)

如果你找不到可以解析你描述的格式并且在MySQL中正确存储的持续时间类型,我建议在几秒钟内使用一个简单的long值,并在getter和setter中转换为/来自字符串。

(这只是一些快速代码,在使用它之前对边界情况做一些正确的测试,加上可能还有一些输入验证。)

class Calls {
    long length

    /** Parse a string with format hhh:mm:ss into a value in seconds. */
    public void setLength(String s) {
        length = s.split(':').collect(Integer.&parseInt).inject {
            a, b -> a * 60 + b
        }
    }

    /** Format a number in seconds into a hhh:mm:ss string. */
    public String getLength() {
        def a = [length]
        for (i in [1, 2]) {
            a << (long)(a[-1] / 60)
            a[-2] %= 60
        }
        String.format("%02d:%02d:%02d", *a.reverse())
    }
}