请考虑以下几点:
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);
}
}
};如果我试图使用以下方法获取当前时区:
long time = location.getTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(time));
TimeZone timeZone = calendar.getTimeZone();返回的时区是与当前运行设备相关联的时区,而不是与当前位置相关联的时区。由于当前的逻辑,用户可以通过设备设置-> Date & time ->禁用自动时区手动更改他/她的当前时区。
是否可以使用Google服务位置API (而不是任何其他API )根据用户地理位置获取当前时区?
发布于 2018-12-31 01:30:19
你为什么需要当地时区?
而且,您使用的是几年前被java.time类取代的非常麻烦的日期时间类。
要捕捉当前时刻,请使用UTC。
Instant instant = Instant.now() ;要向用户表示,请使用JVM当前的默认时区。
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = instant.atZone( z ) ;如果非常重要,请与用户确认。或者至少在用户界面中显示您正在使用的时区。
两个变量instant和zdt表示相同的同时时刻,时间轴上的相同点,但是有不同的挂钟时间。
若要输入未来的约会或事件,请收集日期、时间和区域。将它们组装成一个ZonedDateTime对象。
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。
Instant instant = zdt.toInstant() ;得到当前的时刻。
Instant now = Instant.now() ;比较。
if( instant.isBefore( now ) ) {
… reject their input
}因此,您可以看到,用户的物理位置应该与处理日期-时间值和时间裂片无关。
事实上,你问了你的问题,使我怀疑有一些方面的日期-时间处理,你没有完全理解。处理约会时间是骗人的生意。所以,如果你认为我错过了你的观点,那就澄清你的问题,或者发表评论。
https://stackoverflow.com/questions/53982668
复制相似问题