这个差异是由 SimpleDateFormat("yyyy-MM-dd HH:mm:ss")在解析特定日期
1927-12-31 23:54:07到1927-12-31 23:54:08造成的。
这“一秒钟”内发生突变,相差352000毫秒,约5分52秒。
就能解释你“得到的结果就为1940-01-30 23:54:08"的误差
用Calendar和GregorianCalendar类验证,结果相同。
是Java的错误,还是历史规定,没有查到相关资料,深层次的原因不明。
package Test20201227
import java.text.SimpleDateFormat
import java.util.Date
public class Test02 {
public static void main(String[] args) {
//新建日期对象 并设置时间为实时
Date date = new Date(System.currentTimeMillis())
//设置日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")
//打印格式化以后的日期
System.out.println(sdf.format(date))
}
}
d的类型不是已经在上面一行声明了是Date类型吗?
哦,突然明白题主的意思了,题主的疑问是d没通过new Date()方式获得是不是d就不是Date类型了,是吧?
要关注方法的返回值类型。比如sdf.parse(line),它的返回类型是Date,返回的值赋给了d,所以d也是Date类型,这种方式并不需要new来获取。当然,你要先Date d=new Date();d=sdf.parse(line);也可以,但是这不多此一举了吗?