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

问题描述 投票:3回答:3

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

java calendar simpledateformat
3个回答
0
投票

包中包含类,类包含方法。在java.text,我们有SimpleDateFormat类。如果你去它的public api,你可以看到这个类有一个setTimeZone方法(它继承自java.text.DateFormat类)。所以这个方法确实属于SimpleDateFormat类的API。因此,说setTimeZone方法属于java.util包是错误的。后者可能包含一些具有相同名称的方法的类,但这些方法不相关。


0
投票

setTimeZone

public void setTimeZone(TimeZone zone)

设置此DateFormat对象的日历的时区。此方法等效于以下调用。

getCalendar().setTimeZone(zone)

由此方法设置的TimeZone将被setCalendar调用覆盖。

由于调用解析方法,可能会覆盖此方法设置的TimeZone。

参数: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


0
投票

在创建来自java.text包的Class SimpleDateFormat和实例之后,正在使用Java.util包的setTomeZone方法。

在这种特殊情况下,类都声明为public,因此即使在不同的包中它们也都可见。这个包没关系。 SimpleDateFormat.setTimeZone()采取java.util.TimeZone作为参数并不意外。包只是文件夹,有时需要从另一个文件夹访问某些内容。就这样。

任何人都可以帮助我理解为什么我们将setTimeZone方法与SimpleDateFormat类的实例一起使用而不使用Calendar类的实例?

因为代码的目的是解析日期字符串。 Calendar不提供此类功能。 SimpleDateFormat需要将其时区设置为UTC,以便无论用户的本地时区如何,都可以将日期字符串解析到同一时刻。

© www.soinside.com 2019 - 2024. All rights reserved.