从另一个包中调用类的方法而无需实例化该类

时间:2018-09-16 10:52:54

标签: java calendar simpledateformat

是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是一个抽象类,但在这里无法理解。

3 个答案:

答案 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,以便可以将日期字符串解析为同一时间点,而与用户的本地时区无关。