java - 如何在TimeZone类中获取特定时间

时间:2012-10-15 03:19:39

标签: java timezone

有人请告诉我如何从TimeZone课程中获取时间。当我运行此代码时

System.out.println("Default Timezone: " + TimeZone.getDefault())

我得到了这个

Default Timezone: sun.util.calendar.ZoneInfo[id="Asia/Manila",offset=28800000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null]

我找不到任何可以获得时间的函数,例如TimeZone.getDefault().getTime()。请帮忙。

7 个答案:

答案 0 :(得分:4)

请尝试以下方式获取EST TimeZone的时间:

TimeZone est = TimeZone.getTimeZone("America/New_York");
Calendar calendar = new GregorianCalendar(est);
System.out.println(calendar.getTime());     //<-prints the date
System.out.println(calendar.getTimeInMillis()); //<-prints the time in milliseconds

您可以将时区更改为其他时区,例如PST获取其他时区的时间:

TimeZone pst = TimeZone.getTimeZone("America/Los_Angeles");
calendar.setTimeZone(pst);
System.out.println(calendar.getTime());      //<-prints the date
System.out.println(calendar.getTimeInMillis()); //<-prints the time in milliseconds

希望这有帮助。

答案 1 :(得分:3)

Date theCurrentDateAndTime = new GregorianCalendar(timeZone).getTime();

答案 2 :(得分:2)

TimeZone是一个抽象类,代表时区而不是时间。正如您所提到的,您使用getDefault()调用getDefault(),TimeZone.getDefault(),您将根据程序的运行位置获取时区。

如果您只想打印日期,则可以使用CalendarDate等选项 或者如果您希望按时区特定时间移动,则设置时区并获取该区域的时间。

您的计划会以这种方式打印日期(这不仅仅是这样):

    TimeZone defaultTimezone = TimeZone.getDefault();
    Calendar calendar = new GregorianCalendar(defaultTimezone);
    System.out.println(calendar.getTime());

答案 3 :(得分:1)

TimeZone类表示时区而不是时间。您必须在时间上使用DateCalendar类。

答案 4 :(得分:1)

您需要使用Date(或)Calendar API来获取今天的日期/时间。

这些API使用系统中配置的默认时区。

答案 5 :(得分:1)

你没有。

Javadoc for TimeZone。你会注意到这与当前时间无关。

请参阅Calendar

答案 6 :(得分:0)

TL;博士

LocalTime.now(                    // Capture the current time-of-day for a particular time zone. Result discards the zone, leaving an object unaware of any zone or offset.
    ZoneId.of( "Asia/Manila" )    // Represent the time zone, the history of past, present, and future changes in offset for a specific region.
)
  

23:45

java.time

日期时间处理的现代方法使用 java.time 类,这些类取代了麻烦的旧遗留日期时间类。

你的问题不清楚?您是否要求特定时区的当前时间?或者您是否要求提供有关时区本身的信息,它与UTC的偏移量?

offset-from-UTC是从同一时刻UTC移位的小时数,分钟数和秒数。时区是特定地区人民使用的偏移的过去,现在和将来变化的历史。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "Asia/Manila" ) ; 

当前时间

仅针对特定地区人员在挂钟上看到的当前时间,使用LocalTime.now并传递所需的区域。由此产生的对象缺少区域或偏移的任何概念,因为在确定当前时刻之后将丢弃通过的区域。

LocalTime lt = LocalTime.now( z ) ;
  

23:45

对于该区域中日期的日期,请使用ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.now( z ) ;

要以UTC格式捕获当前时刻,请使用Instant

Instant instant = Instant.now( z ) ;

时区信息

ZoneIdZoneOffset类取代TimeZone

ZoneRules rules = z.getRules() ;

您可以询问ZoneId有关用于定义特定时区行为的规则。您必须传递片刻(Instant),因为时区的整个点是该区域的人员使用的偏移量已经改变了历史记录。例如,愚蠢到足以练习Daylight Saving Time (DST)的国家每年更换两次。

ZoneOffset offset = rules.getOffset( zdt.toInstant() ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore