当前位置: 首页 > 知识库问答 >
问题:

如何在Joda Time/Java8中列出时区偏移量、时区ID和长名称?

段干高歌
2023-03-14

Joda Time的时区ID可以简单地用以下代码段显示。

Set<String> zoneIds = DateTimeZone.getAvailableIDs();

for(String zoneId:zoneIds) {
    System.out.println(zoneId);
}

但是,如何显示相应的时区偏移量、时区ID和长名称,使列表看起来如下所示?

(GMT-10:00) Pacific/Honolulu, Hawaii Standard Time
(GMT-10:00) Pacific/Johnston, Hawaii Standard Time
(GMT-10:00) Pacific/Fakaofo, Tokelau Time
(GMT-10:00) HST, Hawaii Standard Time
Set<String> zoneIds = DateTimeZone.getAvailableIDs();

for (String zoneId : zoneIds) {
    int offset = DateTimeZone.forID(zoneId).getOffset(new DateTime());
    String longName = TimeZone.getTimeZone(zoneId).getDisplayName();

    System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}
(-36000000) Pacific/Honolulu, Hawaii Standard Time
(-36000000) Pacific/Johnston, Hawaii Standard Time
(-36000000) Pacific/Fakaofo, Tokelau Time
(-36000000) HST, Hawaii Standard Time

共有1个答案

壤驷阳冰
2023-03-14

下面的方法起作用了。

import java.util.Set;
import java.util.TimeZone;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

Set<String> zoneIds = DateTimeZone.getAvailableIDs();
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");

for (String zoneId : zoneIds) {
    String offset = dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0);
    String longName = TimeZone.getTimeZone(zoneId).getDisplayName();

    System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}

可能还有其他更好的方法,我现在还不知道。

import java.util.Set;
import org.joda.time.DateTimeUtils;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

Set<String> zoneIds = DateTimeZone.getAvailableIDs();
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");

for (String zoneId : zoneIds) {
    String offset = dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0);
    String longName = DateTimeZone.forID(zoneId).getName(DateTimeUtils.currentTimeMillis());

    System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}
public String getName(long instant, Locale locale)
import java.util.Set;
import org.joda.time.DateTimeUtils;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

Set<String> zoneIds = DateTimeZone.getAvailableIDs();
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");

for (String zoneId : zoneIds) {
    String offset = dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0);
    String shortName = DateTimeZone.forID(zoneId).getShortName(DateTimeUtils.currentTimeMillis());

    System.out.println("(" + offset + ") " + zoneId + ", " + shortName);
}
public String getShortName(long instant, Locale locale)
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.Locale;
import java.util.Set;

Set<String> zoneIds = ZoneId.getAvailableZoneIds();

for (String zoneId : zoneIds) {
    ZoneId zone = ZoneId.of(zoneId);
    ZonedDateTime zonedDateTime = ZonedDateTime.now(zone);

    ZoneOffset offset = zonedDateTime.getOffset();
    String longName = zone.getDisplayName(TextStyle.FULL, Locale.ENGLISH);

    System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}

zone.getDisplayName(TextStyle.full,locale.English)将显示“印度时间”之类的长名称。然而,这不是一个全名,不像乔达时代。

下面将显示给定名称的全名,如“印度标准时间”(无论在适用的地方)。

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("zzzz");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));

下面将显示给定区域的区域偏移量,如GMT+05:30(注意模式的大写)。

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("ZZZZ");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("zzz");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));

https://docs.oracle.com/javase/8/docs/api/java/time/format/datetimeformatter.html

 类似资料:
  • 问题内容: 我知道相反。给定一个时区,我可以通过以下代码片段获取时区偏移量: 我想知道如何从时区偏移量获取时区名称。 鉴于 (以毫秒为单位; +6.00偏移) 我想得到以下任何可能的时区名称的结果: 问题答案: 用

  • 我在两个地方为一个组织工作。其中之一是智利,那里的夏令时极难预测,往往每年都有变化。我们有一个依赖于时间的应用程序,直到现在,一直在使用joda time。当智利政府决定更改夏令时,我们使用joda代码将偏移量设置为默认的: 另外,在Java8Time中转换单元的最佳方法是什么?假设我有24小时,我想把它换算成几天。(我这样问是因为在这种情况下,似乎很多方法都是以毫秒为单位工作的,而我想要以小时为

  • 问题内容: 我需要以[+/-] hh:mm的格式保存手机的时区 我正在使用TimeZone类来处理此问题,但是我只能获得以下格式: 我宁愿不对结果进行子串化,是否可以设置任何键或选项标志来仅获取值,而不获取该时区的名称(GMT / CET / PST …)? 问题答案: 我需要以[+/-] hh:mm的格式保存手机的时区 不,你没有。仅靠偏移量是不够的,您需要存储整个时区名称/ id。例如,我住在

  • 问题内容: 我需要下一个流程: nodejs utils api中有这种可能性吗? 问题答案: 您可以使用node-time,如下所示:

  • 我试图用android的JodaTime库解析ISO格式的日期,但得到了错误的时区偏移量。 我的默认时区是“欧洲/莫斯科”,但结果是“1990-05-04T00:00:00.000 0400”,而它应该是“1990-05-03T23:00:00.000 0300”。Android版本是KitKat。 我做错了什么?

  • 问题内容: MySQL中有没有一种方法可以计算任何时区的偏移量?例如,要获取时区中的本地时间。我想做的是计算该时区的偏移量,并将该偏移量添加到GMT以获得本地时间。 问题答案: 如果要计算某个时区(例如,美国/温哥华)与UTC的时差,则可以按照以下步骤进行操作: 为此,您首先需要按照以下概述将时区信息加载到mysql中:http : //dev.mysql.com/doc/refman/5.0/e