SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date da = new Date();
long day = 24 * 3600 * 1000;
da.setTime(da.getTime() / day * day);//这个相当于取整,去掉小时,分钟和秒了啊
System.out.println(sdf.format(da));
我想得到2010-09-09 00:00:00但是结果是2010-09-09 08:00:00不解!
有其它方法获得这个结果,但是我想不明白为什么我这个方法不行!

解决方案 »

  1.   


    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:00:00");//改成这样就行了
      

  2.   

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
    如果小时也不要  就把HH也改成00
      

  3.   

    我想知道da.getTime() / day * day==da.getTime()有啥子意义啊
    日历计算用日历类Calendar
      

  4.   

    不相等,da.getTime() / day这个得到的是一个整数,没有小数,所以应该去掉了小于天的部分
      

  5.   

    想法很好,不过没必要,用Calendar做的话,就像这样
    Calendar cal =new  GregorianCalendar(Locale.CHINA);
    cal.setTime(new Date());
    cal.set(Calendar.HOUR_OF_DAY, 0);就可以了
      

  6.   

    那还要加上cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    还不如pengzhistar说的了,为什么按我的思维就不行呢!!
      

  7.   


    有时区的问题啊,中国只是+8而已
    而且Calendar还有别的其他功能,很方便,比起DATE好用,再说,GregorianCalendar有几个构造器,可以不用每个都设为0
      

  8.   

    new Date()的时区是得到CST的时间,比UTC快了8小时,所以会多出一个8小时来
      

  9.   

    时区的问题,1970年1月1日零时指的是GMT时间,我们早8小时。所以最后打印出来多8小时,但取整原来做的就已经是对的
    TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date da = new Date();
    long day = 24 * 3600 * 1000;
    da.setTime(da.getTime() / day * day);//这个相当于取整,去掉小时,分钟和秒了啊
    System.out.println(sdf.format(da)); 这样看起来是不是中意了?