在下面的代码中,我将java.util.date转换为java.sql.date。我很困惑,虽然在下面给出了epoch之前的日期,我也使用了date.getTime()方法,它给出了纪元的毫秒数,它给了我正确的时间,如结果所示。我的问题是为什么它没有失败(我认为应该如此)?为什么它给了合适的时间?
代码:
SimpleDateFormat sdf2 = new SimpleDateFormat("dd-M-yyyy hh:mm:ss"); //defining format
String dateOfAdmissionInString = "22-01-1966 05:03:33";
Date utilDateOfAdmission = sdf2.parse(dateOfAdmissionInString);
java.sql.Timestamp sqlDateOfAdmission = new Java.sql.Timestamp(utilDateOfAdmission.getTime());
System.out.println("utilDateOfAdmission:" + utilDateOfAdmission);
System.out.println("sqlDateOfAdmission:" + sqlDateOfAdmission);
结果:
utilDateOfAdmission: Sat Jan 22 05:03:33 PKT 1966
sqlDateOfAdmission: 1966-01-22 05:03:33.0
答案 0 :(得分:3)
我的问题是它没有失败的原因
因为自上世纪以来的毫秒数被允许为负数,这表示 1970年1月1日格林尼治标准时间午夜之前的日期/时间。
Gratuitous example:猫王的出生日期:
Date dt = new Date(-1103932800000L);
System.out.println(dt.toString());
答案 1 :(得分:1)
epoch只指定值ZERO的位置。该点之前的日期/时间仍可表示为来自时期的负偏移。