Есть ли более простой способ получить начало текущего дневного времени, чем этот? - PullRequest
8 голосов
/ 15 марта 2010

Я в основном хочу получить ноль или начальный час для текущего дня.

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 голосов
/ 15 марта 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()
5 голосов
/ 15 марта 2010

Вы можете использовать функцию clearTime() из 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) 
 }
2 голосов
/ 11 апреля 2013

Да, было бы неплохо иметь такой метод. Но если вы можете согласиться на короткую функцию, вот моя:

def startOfDay(t) {
    tz = TimeZone.getDefault();
    t +=tz.getOffset(t);
    t -= (t % 86400000);
    t-tz.getOffset(t);
}

print new Date(startOfDay(System.currentTimeMillis()));
1 голос
/ 03 марта 2014

Не совсем уверен, является ли это лучшим способом или действительно правильным (не уверен, возникнут ли из-за этого проблемы с часовым поясом), но он может работать для простых случаев использования:

Начало дня

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

Конец дня

def today = new Date()
def eod

use (TimeCategory) {
    eod = today.clearTime() + 1.day - 1.millisecond
}
1 голос
/ 15 марта 2010

Согласно Groovy date документации, кажется, что это оптимальный путь.

Однако, используя 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
0 голосов
/ 02 июня 2016

Начиная с Java 8, используйте решение java.time:

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