有没有比这更简单的方法来开始当前时间?

时间:2010-03-15 09:03:50

标签: java datetime groovy calendar

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

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

6 个答案:

答案 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() functionCalendar

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();
相关问题