是Java的新手,不理解来自here
的以下代码SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
在创建SimpleDateFormat
包的类java.text
的实例之后,将使用setTomeZone
包的java.util
方法。
任何人都可以帮助我理解为什么我们在setTimeZone
类的实例上使用SimpleDateFormat
方法而不在Calendar
类的实例上使用为什么吗?
注意:我浏览了几篇文章,告诉我如何从另一个Java类或Java包中调用方法。但是,这对我来说似乎与众不同。我还注意到Calendar
是一个抽象类,但在这里无法理解。
答案 0 :(得分:0)
setTimeZone
public void setTimeZone(TimeZone zone)
设置此DateFormat对象的日历的时区。此方法等效于以下调用。
getCalendar().setTimeZone(zone)
通过此方法设置的TimeZone被setCalendar调用覆盖。
此方法设置的TimeZone可能会由于调用parse方法而被覆盖。
参数: zone-给定的新时区。
https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
答案 1 :(得分:0)
一个包包含类,一个类包含方法。在java.text
中,我们有SimpleDateFormat
类。如果转到其public api,则可以看到该类具有一个setTimeZone
方法(它是从java.text.DateFormat
类继承的)。因此,此方法确实属于SimpleDateFormat
类的API。因此,说setTimeZone
方法属于 java.util
包是错误的。后者可能包含某个类,该类具有一个具有相同名称的方法,但是这些方法无关。
答案 2 :(得分:0)
在创建并创建了来自java.text包的SimpleDateFormat类的实例之后,将使用Java.util包的setTomeZone方法。
在这种情况下,所有类都声明为public
,因此即使在不同的程序包中也都可见。包在这里无关紧要。 SimpleDateFormat.setTimeZone()
使用java.util.TimeZone
作为参数,这一点也不意外。软件包只是文件夹,有时需要从另一个文件夹访问某些内容。就是这样。
任何人都可以帮助我理解为什么我们对SimpleDateFormat类的实例使用setTimeZone方法,而不对Calendar类的实例使用setTimeZone方法吗?
因为代码的目的是解析日期字符串。 Calendar
不提供此类功能。 SimpleDateFormat
需要将其时区设置为UTC,以便可以将日期字符串解析为同一时间点,而与用户的本地时区无关。