从Android设备获取GMT时区

时间:2018-06-04 11:14:54

标签: java android xamarin timezone

问题似乎很简单,但我真的很感激帮助。多次搜索互联网。

以下是获取GMT当前时区的代码:

Java.Util.Calendar mCalendar = new Java.Util.GregorianCalendar();
Java.Util.TimeZone mTimeZone = mCalendar.TimeZone;
int mGMTOffset = mTimeZone.RawOffset + (mTimeZone.InDaylightTime(new Java.Util.Date()) ? mTimeZone.DSTSavings : 0);

string timeDiff = Java.Util.Concurrent.TimeUnit.Hours.Convert(mGMTOffset, Java.Util.Concurrent.TimeUnit.Milliseconds).ToString();

输出:

  

如果移动时间是GMT-03:00那么timeDiff = -3

     

如果移动时间是GMT + 00:00那么timeDiff = 0

     

如果移动时间是GMT + 05:00那么timeDiff = 5

     

如果移动时间是GMT + 05:45那么timeDiff = 5(正确)

问题出现时GMT是十进制值,如5:45显示5。

在这些类型的场景中我该怎么做?

我从以下链接获得了帮助 How to get the timezone offset in GMT(Like GMT+7:00) from android device?

2 个答案:

答案 0 :(得分:1)

  

使用GregorianCalender,您可以获得时区,请查看以下内容   代码

 Calendar mCalendar = new GregorianCalendar();
 TimeZone mTimeZone = mCalendar.getTimeZone();
 int mGMTOffset = mTimeZone.getRawOffset();

 double sZone = (double) (TimeUnit.MINUTES.convert(mGMTOffset,TimeUnit.MILLISECONDS));
string timeDiff = sZone / 60;

答案 1 :(得分:0)

java.time

    ZoneOffset currentOffset = OffsetDateTime.now(ZoneId.systemDefault()).getOffset();
    System.out.println("Current offset is GMT" + currentOffset);

今天在欧洲/哥本哈根时区运行上述片段给出了:

  

当前偏移为GMT + 02:00

丹麦在标准时间+01:00,夏令时+02:00(DST)。我们目前正在使用夏令时,因此输出符合预期,并考虑到夏令时。

不知道Xamarin我给你Java代码并信任你转换。

如果我将JVM的时区设置为亚洲/加德满都,我会得到您要求的偏移量:

  

当前偏移为GMT + 05:45

链接: Oracle tutorial: Date Time解释如何使用java.time