3

印度标准时间(IST) 比格林威治标准时间早 5:30 小时(5 小时 30 分钟)。我们将其显示为 GMT+5.5。

有没有办法按时区找到这个值(在上述情况下,值 = 5.5)?

在我的 android 应用程序中,我可以获取设备时区。但是如何使用设备时区获取此值?

4

6 回答 6

2
double timezoneval = 0.0;
        Calendar cal = Calendar.getInstance();
        cal.set(mn.Year(), mn.Month(), mn.Day(), mn.Hour(), mn.minute(),
                (int) mn.second());
        TimeZone tz = TimeZone.getDefault();
        boolean t = tz.inDaylightTime(cal.getTime());
        if (t)
            timezoneval = ((TimeZone.getDefault().getRawOffset())
                    / (60 * 60 * 1000D) + (TimeZone.getDefault()
                    .getDSTSavings() / (60 * 60 * 1000D)));
        else
            timezoneval = ((TimeZone.getDefault().getRawOffset()) / (60 * 60 * 1000D));

你可以试试这段代码。这将为您提供时区的值。如果你想要不同的时区值;只需更改 TimeZone tz = TimeZone.getDefault();

TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");
        TimeZone.setDefault(tz);

它会为你工作。

于 2013-03-21T09:38:24.127 回答
1

检查时区类。原始偏移量是您想要的,以毫秒为单位。您可以轻松地将其转换为以小时为单位的价值。

long rawOffset = TimeZone.getDefault().getRawOffset();

请参阅http://developer.android.com/reference/java/util/TimeZone.html#getRawOffset()

于 2013-03-21T07:23:26.987 回答
1

tl;博士

如何使用设备时区获取此值

ZonedDateTime.
now(
    ZoneId.systemDefault()  // Or: ZoneId.of("Asia/Kolkata") 
)
.getOffset()
.toString()

请参阅在 IdeOne.com 上实时运行的代码

+05:30

java.time

使用java.time现代 API 的解决方案:

import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
        int seconds = zdt.getOffset().getTotalSeconds();
        System.out.println(seconds);

        // If required, convert it into hours
        double hours = seconds / 3600.0;
        System.out.println(hours);
    }
}

输出:

19800
5.5

Trail: Date Time了解更多关于java.time现代日期时间 API *的信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和您的 Android API 工作level 仍然不符合 Java-8,请通过 deugaringHow to use ThreeTenABP in Android Project检查 Java 8+ APIs 。

于 2021-05-16T15:57:46.037 回答
0

试试这个代码

 public class Sample {


public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        String dateStr = "2010-06-14 02:21:49-0400";
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
        TimeZone tz = TimeZone.getDefault();
        sdf.setTimeZone(tz);
        Date date = sdf.parse(dateStr);

        sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
        String newDateStr = sdf.format(date);

        System.out.println(newDateStr);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

输出应该是这样的

2010-06-14 08:21:49

于 2013-03-21T07:08:39.333 回答
0

尝试:

TimeZone.getDefault();

getDefault()返回当前设备的时区详细信息。然后,您可以调用getOffset()来获取 UTC 和这个时区之间的差异。

于 2013-03-21T07:07:15.763 回答
-1

这实际上是我需要的。

double rawOffset = TimeZone.getDefault().getRawOffset();

rawOffset = rawOffset / (60 * 60 * 1000);

System.out.println("rawOffset : " + rawOffset);
于 2013-03-21T09:38:31.270 回答