我基本上想要在当天获得零或开始时间。
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
答案 0 :(得分:8)
不比其他解决方案简单,但线路较少:
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()
答案 1 :(得分:5)
您可以在Groovy中使用clearTime()
function的Calendar
:
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)
}
答案 2 :(得分:2)
是的,必须有这样的方法会很好。但如果你能解决一个短暂的功能,那么这就是我的:
def startOfDay(t) {
tz = TimeZone.getDefault();
t +=tz.getOffset(t);
t -= (t % 86400000);
t-tz.getOffset(t);
}
print new Date(startOfDay(System.currentTimeMillis()));
答案 3 :(得分:1)
根据Groovy date文档,它似乎是最佳方式。
但是,使用Groovy with关键字,您可以压缩一些语句
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
答案 4 :(得分:1)
不确定这是否是最佳方式,或者确实是正确的(不确定是否会出现时区问题),但它可以用于简单的用例:
一天的开始
def today = new Date()
def start = today.clearTime()
结束日期
def today = new Date()
def eod
use (TimeCategory) {
eod = today.clearTime() + 1.day - 1.millisecond
}
答案 5 :(得分:0)
从Java 8开始使用java.time解决方案:
LocalDateTime ldt = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
ldt.toString();