我对 Flutter 比较陌生。在我尝试的过程中,我遇到了一个问题。我的 REST Api 采用时区参数(区域 ID 格式,例如欧洲/伦敦)。
我看到了https://pub.dartlang.org/packages/flutter_native_timezone和https://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 中提出
任何见解都会非常有帮助。
提前致谢
我也一直在寻找这个,这是我发现的: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)
经过一番挖掘后,我找到了解决我的问题的(临时)解决方法。
使用
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)
因此,我采用用户设备中规定的当地时间和日期,而不使用任何定位服务,这从一开始就是我的目标。
到目前为止,我还没有遇到任何问题......我们会看到......
| 归档时间: |
|
| 查看次数: |
10748 次 |
| 最近记录: |