我在一个项目中看到了以下Java代码:SimpleDateFormat dtFormater = new SimpleDateFormat("EEE, MMM dd");long dt = weatherDataPerDay.getLong(JSON_KEY_DATETIME);String result = dtFormater.format(dt * 1000).toString();首先,以上代码有效。我检查了SimpleDateFormat及其所有前身的定义,但没有找到类似format(long time)的方法。我只有2个接受1个参数的方法。他们是format(Object object)format(Date date)。据我所知,Java仅支持数字数据类型之间的隐式类型转换,并且仅支持从小数据类型到大数据类型的转换。所以我无法解释为什么上面的代码起作用。 最佳答案 您已经注意到,类SimpleDateFormat具有2个方法format:format(Object object)和format(Date date)。由于dt是long,dt * 1000也将是long,并且要感谢autoboxing,它将自动转换为包装类Long的实例,以便最终调用,并以我们的format(Object object)实例作为参数。方法Long将在场景format(Object object)后面调用,该场景仅接受Javadoc中所述的DateFormat#format(Object obj, StringBuffer toAppendTo, FieldPosition fieldPosition)或Number作为参数Date的类型,否则将引发obj。当参数IllegalArgumentException的类型为obj时(在这种情况下,因为Number是Long的子类),它将自动使用Number创建一个新的Date实例,这意味着它除了new Date(((Number)obj).longValue())为格林尼治标准时间1970年1月1日00:00:00以来的总毫秒数。