获取"+0100"(例如)格式的时区



我在文档和谷歌发现的众多与时间相关的问题之间迷失了方向。

我想要的很简单:一个字符串,表示运行时区"[+/-] [数字] [数字] [数字] [数字] [数字]"格式(例如"+0100"(。

我当前的代码是:

    Calendar cal = Calendar.getInstance();
    TimeZone tz = cal.getTimeZone();
    String gmt = "" + tz.getID();

在我的位置返回"GMT",我假设这是时区的简短版本(3 个字母(。

这是我实际最终使用的代码,我希望它对某人有所帮助。

Date today = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("Z");
String gmt = sdf.format(today);

你应该尝试以下事情。

Calendar c = Calendar.getInstance();
        System.out.println("current: " + c.getTime());
        TimeZone z = c.getTimeZone();
        int offset = z.getRawOffset();
        if (z.inDaylightTime(new Date())) {
            offset = offset + z.getDSTSavings();
        }
        int offsetHrs = offset / 1000 / 60 / 60;
        int offsetMins = offset / 1000 / 60 % 60;
        System.out.println("offset: " + offsetHrs);
        System.out.println("offset: " + offsetMins);
        c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
        c.add(Calendar.MINUTE, (-offsetMins));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("GMT Time: " + sdf.format(c.getTime()) + " +"
                + offsetHrs + ":" + offsetMins);

输出

current: Wed May 16 22:32:14 IST 2012
offset: 5
offset: 30
GMT Time: 2012-05-16 17:02:14 +5:30

似乎你想要 SimpleDateFormat 中的"Z"或"X"

Z 时区 RFC 822 时区 -0800X 时区 ISO 8601 时区 -08;-0800;-08:00

java.time

旧的日期时间 API(java.util日期时间类型及其格式化 API,SimpleDateFormat(已过时且容易出错。建议完全停止使用它并切换到现代日期时间 API java.time*。

使用现代 API 的解决方案:

import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
    public static void main(String[] args) {
        // Replace ZoneId as applicable e.g. ZoneId.of("America/New_York")
        ZonedDateTime now = ZonedDateTime.now(ZoneId.systemDefault());
        
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("XX", Locale.ENGLISH);
        String offset = dtf.format(now);
        System.out.println(offset);
    }
}

输出:

+0100

要了解有关现代日期时间 API* 的更多信息,请参阅跟踪:日期时间

<小时 />

来自Ole V.V.的反馈:

您可能希望使用小写xx以便您也能获得+0000而不是 偏移零点Z

感谢 Ole V.V. 的增值,这将使寻找+0000而不是Z零时区偏移量的人受益。我建议严格根据具体要求使用它。ISO 8601 建议使用 Z 作为零时区偏移量的时区指示符。

<小时 />

出于任何原因,如果你必须坚持使用Java 6或Java 7,你可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到Java 6和7。如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请查看通过脱糖提供的 Java 8+ API 和如何在 Android Project 中使用 ThreeTenABP。

相关内容

  • 没有找到相关文章

最新更新