首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用时区API从用户当前地理位置获取时区

问不使用时区API从用户当前地理位置获取时区
EN

Stack Overflow用户
提问于 2018-12-31 00:53:05
回答 1查看 321关注 0票数 0

请考虑以下几点:

代码语言:javascript
复制
LocationCallback mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            List<Location> locationList = locationResult.getLocations();
            if (locationList.size() > 0) {
                //The last location in the list is the newest
                Location location = locationList.get(locationList.size() - 1);
            }
        }
    };

如果我试图使用以下方法获取当前时区:

代码语言:javascript
复制
long time = location.getTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(time));
TimeZone timeZone = calendar.getTimeZone();

返回的时区是与当前运行设备相关联的时区,而不是与当前位置相关联的时区。由于当前的逻辑,用户可以通过设备设置-> Date & time ->禁用自动时区手动更改他/她的当前时区。

是否可以使用Google服务位置API (而不是任何其他API )根据用户地理位置获取当前时区?

EN

回答 1

Stack Overflow用户

发布于 2018-12-31 01:30:19

你为什么需要当地时区?

  • 如果用户在其他地方设置了他们的时区,为什么忽略他们的偏好呢?如果用户重写了自动时区功能,这是因为他们希望看到特定时区中呈现的时刻。
  • 如果记录当前时刻,一般来说,您应该在UTC中记录当前值,而不考虑任何时区。

而且,您使用的是几年前被java.time类取代的非常麻烦的日期时间类。

要捕捉当前时刻,请使用UTC。

代码语言:javascript
复制
Instant instant = Instant.now() ;

要向用户表示,请使用JVM当前的默认时区。

代码语言:javascript
复制
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = instant.atZone( z ) ;

如果非常重要,请与用户确认。或者至少在用户界面中显示您正在使用的时区。

两个变量instant和zdt表示相同的同时时刻,时间轴上的相同点,但是有不同的挂钟时间。

若要输入未来的约会或事件,请收集日期、时间和区域。将它们组装成一个ZonedDateTime对象。

代码语言:javascript
复制
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
LocalTime lt = LocalTime.of( 13 , 30  ) ;
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;

要想与当前的时刻相比较,可以获得一个Instant,以适应UTC。

代码语言:javascript
复制
Instant instant = zdt.toInstant() ;

得到当前的时刻。

代码语言:javascript
复制
Instant now = Instant.now() ;

比较。

代码语言:javascript
复制
if( instant.isBefore( now ) ) {
    … reject their input
}

因此,您可以看到,用户的物理位置应该与处理日期-时间值和时间裂片无关。

事实上,你问了你的问题,使我怀疑有一些方面的日期-时间处理,你没有完全理解。处理约会时间是骗人的生意。所以,如果你认为我错过了你的观点,那就澄清你的问题,或者发表评论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53982668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档