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

Yos*_*ale 14 java date

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

我试过了

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR, 0);        
Date date1 = calendar.getTime();                             
System.out.println(date1);
Run Code Online (Sandbox Code Playgroud)

运行:(这严重搞砸了)

如果计算机上的小时是中午12:00:太阳3月08日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);
Run Code Online (Sandbox Code Playgroud)

但这是一个蹩脚的代码我无法自己写出来.

还有其他选择吗?

谢谢!

Dam*_*amo 25

我用这个:

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();
 }
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 18

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

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

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

  • SO规则#1:如果问题是关于java日期,有人会建议Joda Time.规则#2:如果问题是关于javascript,有人会建议jquery.还有其他人? (23认同)
  • @Paul:SO规则#3:如果问题是关于正则表达式,有人会打破"现在你有两个问题"的引用.规则#4:如果问题是关于编程书籍,我们将获得相同的书籍清单. (8认同)
  • 我只点击了这个问题,看看有没有人建议Joda Time(真的!).:d (4认同)

Osc*_*Ryz 10

您应该使用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() );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

HOUR_OF_DAY:

获取和设置的字段编号,表示一天中的小时.HOUR_OF_DAY用于24小时制.例如,在下午10:04:15.250,HOUR_OF_DAY是22.

小时:

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


Mic*_*rdt 9

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

  • 不,你没试过这个.HOUR是错误的字段,请使用HOUR_OF_DAY! (6认同)