有没有比这更容易的方式开始当前时间?
我基本上想要获得零或开始时间的一天。
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中使用Calendar
的clearTime()
函数 :
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();