grails域类中的时间字段
Posted
技术标签:
【中文标题】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域类中的时间字段的主要内容,如果未能解决你的问题,请参考以下文章