有没有比这更容易的方式开始当前时间?

我基本上想要获得零或开始时间的一天。

def today = Calendar.instance today.set(Calendar.HOUR_OF_DAY, 0) today.set(Calendar.MINUTE, 0) today.set(Calendar.SECOND, 0) println today // Mon Mar 15 00:00:00 SGT 2010 

并不比其他解决方案简单,但线路更少:

 def now = new GregorianCalendar() def today = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH)) println today.getTime() 

您可以在Groovy中使用CalendarclearTime()函数 :

 def calendar = Calendar.instance calendar.with { clearTime() println time } 

有一个方便的方法可以清除java.util.Date和/或java.util.Calendar的时间部分。
有许多用例,比较日历或日期的月/日/年部分是有意义的。 基本上,它将在日历上执行以下操作:

 void clearTime() { clear(Calendar.HOUR_OF_DAY) clear(Calendar.HOUR) clear(Calendar.MINUTE) clear(Calendar.SECOND) clear(Calendar.MILLISECOND) } 

是的,必须有这样的方法会很好。 但如果你能解决一个短暂的function,那么这是我的:

 def startOfDay(t) { tz = TimeZone.getDefault(); t +=tz.getOffset(t); t -= (t % 86400000); t-tz.getOffset(t); } print new Date(startOfDay(System.currentTimeMillis())); 

根据Groovy日期文档,它似乎是最佳方式。

但是,使用带有关键字的Groovy,您可以压缩一些语句

 def today = Calendar.instance with(today) { set Calendar.HOUR_OF_DAY, 0 set Calendar.MINUTE, 0 set Calendar.SECOND, 0 } println today // Mon Mar 15 00:00:00 SGT 2010 

不太确定这是否是最佳方式,或者确实是正确的(不确定是否会出现时区问题),但它可以用于简单的用例:

一天的开始

 def today = new Date() def start = today.clearTime() 

一天的结束

 def today = new Date() def eod use (TimeCategory) { eod = today.clearTime() + 1.day - 1.millisecond } 

从Java 8开始使用java.time解决方案:

 LocalDateTime ldt = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); ldt.toString();