grails域类中的时间字段

     2023-05-07     121

关键词:

【中文标题】grails域类中的时间字段【英文标题】:Time field In grails domain class 【发布时间】: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 StatusACTIVE,INACTIVE
enum AutoPostingSERVICE_CHARGE,STAT_CHARGES,BOTH

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

【问题讨论】:

【参考方案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。

【讨论】:

如何为 Grails 域类中的两个字段创建和异或验证?

】如何为Grails域类中的两个字段创建和异或验证?【英文标题】:HowdoIcreateandXORvalidationfortwofieldsinaGrailsdomainclass?【发布时间】:2012-07-1322:11:48【问题描述】:我有一个问题,我的域类有两个潜在的互斥外部键,一个序列号或一... 查看详情

在 Grails 域类中设置日期字段的默认值

】在Grails域类中设置日期字段的默认值【英文标题】:SettingdefaultvalueforDatefieldinGrailsDomainClass【发布时间】:2013-12-1017:56:28【问题描述】:我正在尝试为Domain类中的Date字段设置默认值。我可以在mapping配置中使用defaultValue,但它... 查看详情

在域类中使用 grails 服务

】在域类中使用grails服务【英文标题】:Usinggrailsserviceindomainclass【发布时间】:2011-01-2810:18:03【问题描述】:我想在我的Grails应用程序中使用服务。但是,它始终为空。我正在使用Grails1.1版。我该如何解决这个问题?示例代码... 查看详情

在另一个域类中查看 grails 域类属性

】在另一个域类中查看grails域类属性【英文标题】:Viewgrailsdomainclasspropertyinanotherdomainclass【发布时间】:2014-01-2617:42:05【问题描述】:您好,我只是在尝试grails并尝试了解有关域类的更多信息。我有两个简单的域类:域类1package... 查看详情

Grails,Field 的域类默认值

】Grails,Field的域类默认值【英文标题】:Grails,domainclassdefaultvalueforField【发布时间】:2012-05-1414:51:12【问题描述】:我想在更新任何行时更新日期字段。意味着每当我更新特定字段时,日期都需要自动更改。我怎样才能在grails... 查看详情

如何在 Grails 域类中正确设置属性值

】如何在Grails域类中正确设置属性值【英文标题】:HowtoProperlySetPropertyValueinGrailsDomainClass【发布时间】:2014-10-3110:17:42【问题描述】:只是做了一些测试和谷歌搜索,并遇到了一个建议,如果你想设置一个默认值,你应该在一个... 查看详情

Grails Scaffolding Templates - 从域类中获取属性

】GrailsScaffoldingTemplates-从域类中获取属性【英文标题】:GrailsScaffoldingTemplates-getpropertiesfromdomainclass【发布时间】:2016-07-0911:13:33【问题描述】:我正在处理我的脚手架模板,更具体地说是create.gsp文件。我想获得在我的类中定义... 查看详情

如何从 Grails 控制器和视图外部引用 Grails 域类字段?

】如何从Grails控制器和视图外部引用Grails域类字段?【英文标题】:HowtoreferenceaGrailsdomainclassfieldsfromoutsideoftheGrailscontrollerandview?【发布时间】:2010-09-2815:26:33【问题描述】:我有域类:classChildstatichasMany=[toys:Toy]StringnameSettoysclassT... 查看详情

向 Grails 域类添加字段?

】向Grails域类添加字段?【英文标题】:AddafieldtoaGrailsDomainClass?【发布时间】:2010-10-1312:12:42【问题描述】:我想向现有域类添加一个字段。我不想丢失我的视图文件,但是我知道如果我运行generate-all就会发生。还有其他方法可... 查看详情

Grails:将枚举类型的mysql字段映射到域类

】Grails:将枚举类型的mysql字段映射到域类【英文标题】:Grails:mapmysqlfieldoftypeenumtodomainclass【发布时间】:2012-05-1709:52:49【问题描述】:如何将枚举类型的mysql字段映射到grails域类?我正在使用带有grailsv.2.0.3的现有(旧版)mySQL... 查看详情

使用单个 grails 域类属性进行动态内联验证

】使用单个grails域类属性进行动态内联验证【英文标题】:Dynamicinlinevalidationwithindividualgrailsdomainclassattributes【发布时间】:2012-10-0206:13:44【问题描述】:目前,我们应用程序中的所有表单验证都是在提交表单时执行的。每个Comma... 查看详情

Grails:将自定义约束应用于域类的所有字段

】Grails:将自定义约束应用于域类的所有字段【英文标题】:Grails:ApplyacustomconstrainttoallfieldsofanDomainclass【发布时间】:2014-08-2306:20:08【问题描述】:在Grails中,可以在Config.groovy文件中定义全局约束,该文件可用于验证来自每个... 查看详情

如何在 Grails 2.2 中设置域类值的默认值?

】如何在Grails2.2中设置域类值的默认值?【英文标题】:HowtosetdefaultvalueforDomainClassValuesinGrails2.2?【发布时间】:2013-05-0612:54:05【问题描述】:在我的Grails域类中,我想设置保留在数据库中的默认值。我使用mysql作为数据库。我试... 查看详情

使用 TEXT 字段将 Grails 域类映射到遗留数据库的问题

】使用TEXT字段将Grails域类映射到遗留数据库的问题【英文标题】:ProblemmappingGrailsDomainclasstolegacydatabasewithTEXTfield【发布时间】:2011-09-2902:09:07【问题描述】:我正在尝试使用Grails1.3.7和MySQL5.1.56为遗留数据库构建一组域类。我在B... 查看详情

字段插件 - Grails 表

...grails使用字段插件并遇到问题,当我使用字符串列表搭建域类时,属性类显示如下org.grails.datastore.mapping.dirty.checking.DirtyCheckingList类Listview这是我的域类classRoleStringidStringr 查看详情

我应该将瞬态域类放在 grails 应用程序中的啥位置?

】我应该将瞬态域类放在grails应用程序中的啥位置?【英文标题】:WhereshouldIplaceatransientdomainclassinagrailsapp?我应该将瞬态域类放在grails应用程序中的什么位置?【发布时间】:2011-06-3010:03:00【问题描述】:我应该在grails应用程序... 查看详情

grails spring security ui在用户域类上没有电子邮件字段

】grailsspringsecurityui在用户域类上没有电子邮件字段【英文标题】:grailsspringsecuirityuiwithoutmailfieldonUserdomainclass【发布时间】:2014-11-2000:30:33【问题描述】:在我的Grails项目中,我使用的是spring安全插件,它们是core、ui和acl。它们... 查看详情

如何使用用户定义的函数为 grails 中的域类变量设置默认值

】如何使用用户定义的函数为grails中的域类变量设置默认值【英文标题】:Howcaniuseuserdefinefucntiontosetdefaultvaluefordomainclassvariableingrails【发布时间】:2015-02-0319:39:54【问题描述】:这里的Cycle是一个领域类classCycleintlenght=42String[]moni... 查看详情