颤振时区(作为 ZoneId)

Pan*_*Pan 6 timezone flutter

我对 Flutter 比较陌生。在我尝试的过程中,我遇到了一个问题。我的 REST Api 采用时区参数(区域 ID 格式,例如欧洲/伦敦)。

我看到了https://pub.dartlang.org/packages/flutter_native_timezonehttps://pub.dartlang.org/packages/timezone,但它们都不能满足我的需求。

我的目标是,当用户连接到互联网时(如果可能的话,不提供对应用程序的任何位置访问权限),以 ZoneId 格式获取时区并反馈给我的后端,以便进行必要的日期和时间调整。类似的东西

>>> var timezone = jstz.determine();
>>> timezone.name(); 
"Europe/London"
Run Code Online (Sandbox Code Playgroud)

https://bitbucket.org/pelepim/jstimezonedetect 中提出

任何见解都会非常有帮助。

提前致谢

Ale*_*rol 6

我也一直在寻找这个,这是我发现的:https : //pub.dev/packages/flutter_native_timezone

它在幕后有点老套,但它似乎在 iOS 和 Android 上都能正常工作。希望这会帮助有需要的人。

用法:

final String currentTimeZone = await FlutterNativeTimezone.getLocalTimezone();
print(currentTimeZone); // Europe/Moscow
Run Code Online (Sandbox Code Playgroud)

  • 该插件似乎不再维护,并且与最新版本的 Flutter/Gradle 不兼容 (2认同)

Pan*_*Pan 0

经过一番挖掘后,我找到了解决我的问题的(临时)解决方法。

使用

var now = new DateTime.now();
var timezoneOffset = now.timeZoneOffset;
Run Code Online (Sandbox Code Playgroud)

我在 flutter 中得到了 UTC 格式的 timezoneOffset 。然后将其作为字符串(即“-04”)发送到我的后端并正确漂移我的 ZoneId。

Integer tzOffsetHour = Integer.valueOf(covertToTimezone);
ZoneOffset offset = ZoneOffset.ofHoursMinutes(tzOffsetHour, 0);
ZoneId zoneTZ = ZoneId.ofOffset("UTC", offset);
LocalDateTime localDateTimeClient = new Date().toInstant().atZone(zoneTZ).toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)

因此,我采用用户设备中规定的当地时间和日期,而不使用任何定位服务,这从一开始就是我的目标。

到目前为止,我还没有遇到任何问题......我们会看到......