取一个整数天,例如Date dateC = simFormat.parse("2013.03.28 00:00:00");按照jdk的解释为什么将获取的毫秒数转换为天数竟然不是整数?
package test;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DateTest { /**
 * @param args
 * @throws ParseException 
 */
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat simFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
Date dateC = simFormat.parse("2013.03.28 00:00:00");
int dateCDays = (int) Math.abs(dateC.getTime()/(24*60*60*1000));
System.out.println("dateC is " + dateCDays);
System.out.println(dateC.getTime());
float dateCTime = dateC.getTime();
System.out.println(dateCTime/(24*60*60*1000));
}}java date

解决方案 »

  1.   

    Date dateC = new Date();
       SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String dateString = formatter.format(dateC);
    然后输出dataString看看
      

  2.   

    看了这个,大家应该就会明白了:
     
              SimpleDateFormat simFormat = new SimpleDateFormat("yyyy.MM.dd");  
      Date dateC1 = simFormat.parse("1970.01.01"); 
      Date dateC2 = simFormat.parse("2013.03.28"); 
      double dateCTime1 = dateC1.getTime();
      double dateCTime2 = dateC2.getTime();
      System.out.println(dateCTime1);
      System.out.println(dateCTime2);
      System.out.println(dateCTime2/(24*60*60*1000));
      System.out.println((dateCTime2-dateCTime1)/(24*60*60*1000));  }
    运行结果如下:      
    -2.88E7               刚好8个小时时差,因此想到东八区的问题。
    1.3644E12
    15791.666666666666
    15792.0修改本地时区为格林威治标准时间,代码一样,运行结果如下:
    -3600000.0
    1.3644288E12
    15792.0
    15792.041666666666
    还有LZ用float,精度也缺失了:
     float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
     double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。