java - 使用 Joda-Time 获取给定日期和时区的 UTC 偏移量

标签 java timezone jodatime utc

我有 2013 年 1 月 20 日、2012 年 8 月 8 日等格式的日期,它们有自己的特定时区。例如,20Jan2013 的时区 ID 可能是 Australia/Melbourne,而 08Aug2012 的时区 ID 可能是 Europe/London。我想要做的是,根据这些时区和日期,计算给定日期该时区的 UTC 偏移量。到目前为止,我已经想出了这个:

DateTimeFormatter dtf = DateTimeFormat.forPattern("ZZ");
DateTimeFormatter dtf1 = DateTimeFormat.forPattern("ddMMMYYYY");

DateTimeZone zone = DateTimeZone.forID("Australia/Melbourne");  

DateTime thisDate = dtf1.parseDateTime("30Jul2013");                                            
System.out.println("\nZone: " + thisDate.withZone(zone));

这给了我输出:

Zone: 2013-07-30T00:00:00.000+10:00

这是正确的,但我只想从中提取 UTC 偏移量,在本例中为 +10:00。我一直在寻找方法来做到这一点,但找不到任何东西。有什么办法可以做到这一点?我看到的唯一选择是将输出转换为字符串并使用子字符串方法获取 UTC 偏移量。

以上代码确实考虑了 DST(夏令时)。因此,例如,如果我有: 日期时间 thisDate = dtf1.parseDateTime("30Jan2013");

输出将是:2013-01-30T00:00:00.000+11:00

(最后是 +11:00 而不是 +10:00)

所以基本上我需要做的就是找到一种方法从 2013-07-30T00:00:00.000+11:00 中提取 +11:00。请帮忙!

最佳答案

获取时区名称和小时偏移量的简单方法

public static String getCurrentTimeZoneOffset() {
    DateTimeZone tz = DateTimeZone.getDefault();
    Long instant = DateTime.now().getMillis();

    String name = tz.getName(instant);

    long offsetInMilliseconds = tz.getOffset(instant);
    long hours = TimeUnit.MILLISECONDS.toHours( offsetInMilliseconds );
    String offset = Long.toString( hours );

    return name + " (" + offset + " Hours)";
    // Example: "Mountain Standard Time (-7 Hours)"
}

注意事项:

  • 这从 JodaTime 获取默认的 DateTimeZone。您可以修改它以接受传递到方法中的特定 DateTimeZone。
  • 这会以类似“Mountain Standard Time (-7 Hours)”的格式返回它,但您可以很容易地将其格式化为您认为合适的格式。

希望对您有所帮助。

日本

关于java - 使用 Joda-Time 获取给定日期和时区的 UTC 偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14602610/

相关文章:

java - 限制 Joda 定时器不依赖于系统时间

java - ucanaccess_net.ucanaccess.jdbc.DBReference@ac6b76 文件夹

java - System.out.print ('\r' ) 不起作用

javascript - Zapier 代码 (NodeJS) toLocaleString() timeZone

java - 乔达日期时间到 Unix 日期时间

java - 关于 Joda 的 DateTime 的一点澄清

java - 使用父类的通用生成器创建子类

java - 调用 Spring Data Rest Repository 方法不返回链接

python - Pandas 中带有时区列的时间戳

PHP,代码点火器 : How to Set Date/Time based on users timezone/location globally in a web app?