获取格林尼治标准时间



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

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

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

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);

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

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

看到http://developer.android.com/reference/java/util/TimeZone.html getRawOffset ()

br

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

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

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


*出于任何原因,如果你必须坚持Java 6或Java 7,你可以使用ThreeTen-Backport,它支持大部分 Java。time功能到Java 6 &7. 如果你正在为一个Android项目工作,你的Android API级别仍然不符合Java-8,检查Java 8+可用的API,通过desugaring和如何在Android项目中使用ThreeTenABP。

尝试:

TimeZone.getDefault();

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

试试这个代码

 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

这正是我所需要的。

double rawOffset = TimeZone.getDefault().getRawOffset();
rawOffset = rawOffset / (60 * 60 * 1000);
System.out.println("rawOffset : " + rawOffset);

相关内容

  • 没有找到相关文章

最新更新