7

私はgrailsプロジェクトで働いています。私のアプリケーションで剣道グリッドを使用しています。2つの時間フィールドstartTimeとendTimeを含む「StatTimings」という名前のドメインクラスを作成する必要があります。これらの2つの変数cozに「日付」データ型を使用することはできません。必要な時間形式はhh:mmです。このためのプラグインをインストールしたくありません。これは今のところ私のドメインです:

class StatTimings{

???? startTime
???? endTime
Date date
AutoPosting autoPosting
Status status

static constraints = {
}

enum Status{ACTIVE,INACTIVE}
enum AutoPosting{SERVICE_CHARGE,STAT_CHARGES,BOTH}

}

時間だけを受け入れるように自分のフィールドを作成する方法はありますか?

4

3 に答える 3

3

このクラスの (HTTP パラメーターからの) インスタンスの永続化とバインドを簡単にするために、毎回を 2 つの整数フィールドとして表し、 と のようなヘルパー メソッドを追加getStartTime()getEndTime()ます。開始時刻と終了時刻の差の計算などを行う必要がある場合は、これらのヘルパーを変更して、(日の部分を今日に設定して) aDateではなくa を返すようにすることができます。String

class StatTimings {

  static transients = ['startTime', 'endTime']

  Integer startHours
  Integer startMins

  Integer endHours
  Integer endMins

  private String formatTime(Integer hours, Integer mins) {
    String formattedHours = hours < 10 ? "0$hours" : hours.toString()
    String formattedMins = mins < 10 ? "0$mins" : mins.toString()
    "$formattedHours:$formattedMins"
  }

  String getStartTime() {
    formatTime(startHours, startMins)          
  }

  String getEndTime() {
    formatTime(endHours, endMins)
  }

  static constraints = {
    startHours range: 0..23
    endHours range: 0..23

    startMins range: 0..59
    endMins range: 0..59

    // TODO: add a custom validator that checks the end time is after start time
  }
}
于 2012-05-30T11:00:51.377 に答える
2

Date を使用して、getStartTime()メソッドで必要な形式に変換することができますSimpleDateFormat。このようにして、日付部分を無視します。

class StatTimings {
    ...

    def getStartTime() {
        return new SimpleDateFormat("hh:mm").format(this.startTime);
    }

}
于 2012-05-30T10:23:38.670 に答える
1

java.sql.Time クラスは java.util.Date をサブクラス化し、ほぼ同じものを作成し、以下のようにカスタム toString 実装を追加します。

public String toString () {

    int hour = super.getHours();
    int minute = super.getMinutes();
    int second = super.getSeconds();
    String hourString;
    String minuteString;
    String secondString;

    if (hour < 10) {
        hourString = "0" + hour;
    } else {        
        hourString = Integer.toString(hour);
    }
    if (minute < 10) {
        minuteString = "0" + minute;
    } else {        
        minuteString = Integer.toString(minute);
    }
    if (second < 10) {
        secondString = "0" + second;
    } else {        
        secondString = Integer.toString(second);
    }
    return (hourString + ":" + minuteString + ":" + secondString);
}

したがって、ブートストラップで Date クラスにメソッドを動的に追加し、必要に応じて呼び出すことができると思います。

ここで完全なソースを見ることができます。

于 2012-05-29T13:00:51.013 に答える