获得格林威治标准时间

时间:2013-03-21 07:05:14

标签: java android timezone gmt

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

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

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

6 个答案:

答案 0 :(得分: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);

它适用于你。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

tl;博士

<块引用>

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

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

看到这个code run live at IdeOne.com

<块引用>

+05:30

java.time

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

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

modern date-time API 中详细了解 java.timeTrail: Date Time*


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

答案 3 :(得分:0)

尝试:

TimeZone.getDefault();

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

答案 4 :(得分: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 AM

答案 5 :(得分:-1)

这实际上就是我所需要的。

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

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

System.out.println("rawOffset : " + rawOffset);