在Java中获取今天的日期 – 我已经尝试了常规方法

我需要今天的日期 – 零其他任何东西(“05/06/08 00:00:00”)

我试过了

Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR, 0); Date date1 = calendar.getTime(); System.out.println(date1); 

运行:(这严重搞砸了)

如果计算机上的小时是中午12:00:2009年3月8日00:44:39 IST 2009

如果计算机上的小时是中午> 12:00:太阳3月08日12:46:53 IST 2009

所以我放弃了。

所有Date的setter都被弃用了(纪元时间除外) – 所以我也不想使用它们

我唯一能想到的是

 Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); String sDate = dateFormat.format(calendar.getTime()); Date today = dateFormat.parse(sDate); 

但这是一个如此蹩脚的代码,我无法自己写出来。

还有其他选择吗?

谢谢!

我对Java日期/时间问题的标准建议:不要使用java.util.{Calendar,Date} 。 使用Joda时间 。 这样,您可以将日期表示为日期 (没有关联的时区),而不是日期/时间。 或者您可以使用DateMidnight如果这是您想要表示的。 (注意时区和日期的组合虽然没有午夜……)

你有什么需要使用Date ? 如果你可以随时改变使用Joda,那就太好了。 否则,您可以使用Joda执行您想要的操作,然后在需要时转换为毫秒(然后转换为java.util.Date )。

(迈克尔在使用Date / Calendar时的解决方案很好,如果你真的想要坚持一个破碎的API …但我不能夸大Joda是多么好……)

我用这个:

 public static Date startOfDay(Date date) { Calendar dCal = Calendar.getInstance(); dCal.setTime(date); dCal.set(Calendar.HOUR_OF_DAY, 0); dCal.set(Calendar.MINUTE, 0); dCal.set(Calendar.SECOND, 0); dCal.set(Calendar.MILLISECOND, 0); return dCal.getTime(); } 

您应该使用HOUR_OF_DAY而不是HOUR ,并将其与MINUTE和SECOND结合使用。

 import java.util.Calendar; import static java.util.Calendar.HOUR_OF_DAY; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import static java.util.Calendar.MILLISECOND; public class Today { public static void main( String [] args ) { Calendar cal = Calendar.getInstance(); cal.set( HOUR_OF_DAY, 0 ); cal.set( MINUTE, 0 ); cal.set( SECOND, 0 ); cal.set( MILLISECOND, 0 ); System.out.println( cal.getTime() ); } } 

您获得的结果是由于HOUR用于AM / PM而HOUR_OF_DAY为24小时。

HOUR_OF_DAY:

get和set的字段编号表示一天中的小时。 HOUR_OF_DAY用于24小时制。 例如,在10:04:15.250 PM,HOUR_OF_DAY是22。

小时:

get和set的字段编号,表示上午或下午的小时。 HOUR用于12小时制(0 – 11)。 中午和午夜由0表示,而不是由12表示。例如,在10:04:15.250 PM,HOUR为10。

时间组件不仅仅是几小时(正如您所注意到的那样,Calendar.HOUR是AM / PM)。 您需要将所有时间字段设置为0:HOUR_OF_DAY,MINUTE,SECOND,MILLISECOND。

请参阅Apache的commons-lang DateUtils.truncate()

如上所述,你应该使用

 Calendar.HOUR_OF_DAY 

相反

 Calendar.HOUR 

此外,您需要通过将其他字段( Calendar.MINUTECalendar.SECONDCalendar.MILLISECOND )设置为零来清除它们。

对不起,这里没有简单的方法。 一个痛苦,这就是为什么他们正在为Java 7开发一个新的API我相信基于Joda Time。

…或者你可以用黑客方式做到这一点:

 long MS_PER_DAY = 86400000L; Date dateTime=new Date(); long offset = TimeZone.getDefault().getOffset(dateTime.getTime()); Date date= new Date(((dateTime.getTime()+offset)/MS_PER_DAY)*MS_PER_DAY-offset); 

我知道这是一个非常古老的问题,不再活跃,但当我搜索谷歌时,它就成了最重要的问题。

虽然所有建议都非常好,但我不敢相信没人简单回答:

 Date date = new Date(System.currentTimeMillis()); System.out.println(date); 

哪个有效地返回,今天的日期。

为什么字符串操纵?

你能不能在使用getTime()转换为Date之前在Calendar对象上设置所需的值?

JodaTime的另一票。

java.util.Date和Calendar非常糟糕,它们被破坏了。 (而SimpleDateFormat也是垃圾!)

值得一提的是,Java 7将包含一个基于JodaTime的新日期时间库。