【问题标题】:Get timezone in GMT from Android devices从 Android 设备获取 GMT 时区
【发布时间】:2018-06-04 11:14:54
【问题描述】:

这个问题看起来很简单,但我非常感谢您的帮助。多次上网搜索。

以下是在 GMT 中获取 Android 设备当前时区的代码:

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?

【问题讨论】:

  • 最后一种情况的期望结果是什么?一串5:45??你还需要什么偏移量?对于您真正想要获得的东西,可能会有更好的解决方案。
  • 我会使用OffsetDateTime.now(ZoneId.systemDefault()).getOffset() 来获取ZoneOffset 对象,然后尝试对其进行格式化。要在不是很新的 Android 上执行此操作,您需要先将 ThreeTenABP 添加到您的项目中。
  • 朋友有什么更好的解决方案?

标签: java android xamarin timezone


【解决方案1】:

java.time

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

今天在欧洲/哥本哈根时区运行上述 sn-p 得到:

当前时差为 GMT+02:00

丹麦标准时间为 +01:00,夏季时间 (DST) 为 +02:00。我们目前使用的是夏令时,因此输出符合预期,并且确实考虑了夏令时。

不知道 Xamarin,我给你 Java 代码并相信你会转换。

如果我将 JVM 的时区设置为 Asia/Kathmandu,我会得到您要求的偏移量:

当前时差为 GMT+05:45

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

【讨论】:

    【解决方案2】:

    使用 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;
    

    【讨论】:

    • 在这段代码的帮助下,我得到了 5.75,我将其转换为字符串,如 "GMT+05:45" Thanx buddy :)
    • 最欢迎@ZainSMJ。
    • 仅供参考,存在严重缺陷的日期时间类,如 java.util.Datejava.util.CalendarGregorianCalendarjava.text.SimpleDateFormat 现在是 legacy,被内置的 java.time 类所取代Java 8 及更高版本。
    猜你喜欢
    • 2022-01-11
    • 2016-04-26
    • 2012-11-03
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2019-04-06
    相关资源
    最近更新 更多