Java 得到昨天的时间第一个和最后一个小时

Java 得到昨天的时间第一个和最后一个小时,java,groovy,Java,Groovy,我需要第一次和最后一次了解昨天。e、 g对于今天11月18日,我需要输出 2013-11-17 00:00:00 及 如何得到这个 我可以手动获取它(比如获取昨天的日期(17)并自己输入其余的值),但我需要以编程方式获取完整的表单,在Java 8中,您可以通过以下方式实现: DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); cal.

我需要第一次和最后一次了解昨天。e、 g对于今天11月18日,我需要输出

2013-11-17 00:00:00

如何得到这个


我可以手动获取它(比如获取昨天的日期(17)并自己输入其余的值),但我需要以编程方式获取完整的表单,在Java 8中,您可以通过以下方式实现:

  DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.DAY_OF_MONTH, -1);
  cal.set(Calendar.HOUR_OF_DAY, 0);
  cal.set(Calendar.MINUTE, 0);
  cal.set(Calendar.SECOND, 0);
  cal.set(Calendar.MILLISECOND, 0);
  System.out.println(sdf.format(cal.getTime()));
  cal.set(Calendar.HOUR_OF_DAY, 23);
  cal.set(Calendar.MINUTE, 59);
  cal.set(Calendar.SECOND, 59);
  cal.set(Calendar.MILLISECOND, 999);
  System.out.println(sdf.format(cal.getTime()));

(在Java7中也不难,但要聪明得多)

Elliott给了我们一个很好的Java解决方案

Groovyer的方式如下:

import java.text.SimpleDateFormat

def sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
def cal = new Date().previous().toCalendar() // Obtain previous date
cal.set(Calendar.HOUR, 0) // initialise it
cal.set(Calendar.MINUTE, 0)
cal.set(Calendar.SECOND, 0)
println sdf.format(cal.time)
cal++ // Go one day up
cal.add(Calendar.SECOND, -1) // Step back by second
println sdf.format(cal.time)

使用Groovy,您可以获得:

new Date().previous().clearTime().toCalendar().with { cal ->
    println format( "yyyy-MM-dd HH:mm:ss" )
    add( Calendar.DAY_OF_YEAR, 1 )
    add( Calendar.SECOND, -1 )
    println format("yyyy-MM-dd HH:mm:ss")
}
或:


另一种方法是:

Date getTodayStart( Date inDate){
    Calendar cal = Calendar.getInstance()
    cal.set(inDate[Calendar.YEAR], inDate[Calendar.MONTH], inDate[Calendar.DATE], 0, 0, 0)
    Date todayStart = cal.getTime()
    return todayStart
}

Date getTodayEnd(Date inDate){
    Calendar cal = Calendar.getInstance()
    cal.set(inDate[Calendar.YEAR], inDate[Calendar.MONTH], inDate[Calendar.DATE], 0, 0, -1)
    Date todayEnd = cal.getTime() + 1
    return todayEnd
}
并调用以下方法:

Date startDate = getTodayStart(date)
Date endDate =  getTodayEnd(date)

你可以定义什么是
full form
?我可以这样做,我想知道查看
org.apache.commons.lang.time.DateUtils
是否有任何内置方法。这可能会有帮助。@LynAs“内置”是什么意思?通过Calendar.set(…),您可以将每个字段设置为您喜欢的任何值。与您的情况一样:您需要设置小时、分钟和秒。所以,是的,有一些“内置的”。这是更好的谢谢
def dates = new Date().clearTime().with { d ->
    use( groovy.time.TimeCategory ) {
        [ d - 1.day, d - 1.second ]
    }
}
dates.each { println it.format( 'yyyy-MM-dd HH:mm:ss' ) }
Date getTodayStart( Date inDate){
    Calendar cal = Calendar.getInstance()
    cal.set(inDate[Calendar.YEAR], inDate[Calendar.MONTH], inDate[Calendar.DATE], 0, 0, 0)
    Date todayStart = cal.getTime()
    return todayStart
}

Date getTodayEnd(Date inDate){
    Calendar cal = Calendar.getInstance()
    cal.set(inDate[Calendar.YEAR], inDate[Calendar.MONTH], inDate[Calendar.DATE], 0, 0, -1)
    Date todayEnd = cal.getTime() + 1
    return todayEnd
}
Date startDate = getTodayStart(date)
Date endDate =  getTodayEnd(date)