2010-03-15 42 views

Trả lời

7

Không đơn giản hơn so với các giải pháp khác, nhưng ít dòng:

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() 
+0

Đây thực sự là ngắn hơn so với phần còn lại của các giải pháp được đề xuất. :-) –

1

Theo tài liệu Groovy date, có vẻ như đó là cách tối ưu.

Tuy nhiên, sử dụng Groovy with từ khóa, bạn có thể nén một chút báo cáo của bạn

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

Bạn có thể sử dụng clearTime() function của Calendar trong Groovy:

def calendar = Calendar.instance 
calendar.with { 
    clearTime() 
    println time 
} 

Nó muốn được tốt đẹp để có một phương pháp tiện lợi xóa phần thời gian của một java.util.Date và/hoặc java.util.Calendar.
Có rất nhiều trường hợp sử dụng mà nó có ý nghĩa so sánh các phần chỉ tháng/ngày/năm của lịch hoặc ngày. Về cơ bản, nó sẽ thực hiện sau đây trên Lịch:

void clearTime() { 
    clear(Calendar.HOUR_OF_DAY) 
    clear(Calendar.HOUR) 
    clear(Calendar.MINUTE) 
    clear(Calendar.SECOND) 
    clear(Calendar.MILLISECOND) 
} 
2

Vâng, nó sẽ được tốt đẹp phải có một phương pháp. Nhưng nếu bạn có thể giải quyết cho một hàm ngắn sau đó ở đây là của tôi:

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

print new Date(startOfDay(System.currentTimeMillis())); 
+0

Rất tốt, cảm ơn bạn. –

0

Không khá chắc chắn nếu điều này là cách tốt nhất, hoặc thực sự chính xác (không chắc chắn nếu vấn đề múi giờ sẽ phát sinh từ này), nhưng nó có thể làm việc cho trường hợp sử dụng đơn giản:

Bắt đầu ngày

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

Cuối ngày

def today = new Date() 
def eod 

use (TimeCategory) { 
    eod = today.clearTime() + 1.day - 1.millisecond 
} 
0

Bắt đầu từ Java giải pháp java.time 8 sử dụng:

LocalDateTime ldt = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); 
ldt.toString(); 
Các vấn đề liên quan