【问题标题】:Time field In grails domain classgrails域类中的时间字段
【发布时间】:2012-06-03 16:50:15
【问题描述】:

我正在从事一个 grails 项目。我在我的应用程序中使用剑道网格。我需要创建一个名为“StatTimings”的域类,其中包含两个时间字段 startTime 和 endTime。我不能对这两个变量使用“日期”数据类型,因为我需要的时间格式是 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}

}

有什么方法可以让我的领域只接受时间?

【问题讨论】:

    标签: grails


    【解决方案1】:

    为了便于持久化和绑定(来自 HTTP 参数)该类的实例,我将每次表示为两个整数字段并添加一些辅助方法,例如 getStartTime()getEndTime()。如果您需要执行诸如计算开始时间和结束时间之间的差异之类的操作,您可能希望将这些帮助程序更改为返回 Date 而不是 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
      }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 Date 并在 getStartTime() 方法中将其转换为您需要的格式 SimpleDateFormat 的帮助。这样你就忽略了它的日期部分。

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

      【讨论】:

        【解决方案3】:

        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 类添加一个方法,并在需要时调用它。

        你可以看到完整的源码here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          • 1970-01-01
          • 2012-06-28
          • 2010-09-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多