Java 得到昨天的时间第一个和最后一个小时
我需要第一次和最后一次了解昨天。e、 g对于今天11月18日,我需要输出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.
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)