代码之家  ›  专栏  ›  技术社区  ›  Teo Choong Ping

有没有比这更容易的方法来开始今天的时间?

  •  8
  • Teo Choong Ping  · 技术社区  · 14 年前

    我基本上想得到零或开始一天的小时。

    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 回复  |  直到 8 年前
        1
  •  8
  •   Miklos Csuka    14 年前

    不比其他解决方案简单,但行数更少:

    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()
    
        2
  •  5
  •   VonC    14 年前

    你可以用 clearTime() function 属于 Calendar 在Groovy:

    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) 
     }
    
        3
  •  2
  •   mikeyreilly    10 年前

    是的,有这样的方法会很好。但如果你能满足于一个简短的功能,那么这是我的:

    def startOfDay(t) {
        tz = TimeZone.getDefault();
        t +=tz.getOffset(t);
        t -= (t % 86400000);
        t-tz.getOffset(t);
    }
    
    print new Date(startOfDay(System.currentTimeMillis()));
    
        4
  •  1
  •   Riduidel    14 年前

    根据 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
    
        5
  •  1
  •   Nico Huysamen    10 年前

    不太确定这是否是最好的方法,或者确实是正确的(不确定是否会由此产生时区问题),但它可以用于简单的用例:

    开始的一天

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

    一天结束

    def today = new Date()
    def eod
    
    use (TimeCategory) {
        eod = today.clearTime() + 1.day - 1.millisecond
    }
    
        6
  •  0
  •   MichailI    8 年前

    从Java 8开始使用JavaTimes解决方案:

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