取一个整数天,例如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
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
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateC);
然后输出dataString看看
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位。