我对Flutter相对较新。在进行实验时,遇到了一个问题。我的REST Api使用时区参数(区域ID格式,例如Europe / London)。
我看到了cmsis file和https://pub.dartlang.org/packages/flutter_native_timezone,但都没有满足我的需求。
我的目标是,当用户连接到互联网时(如果可能,不授予应用程序任何位置访问权限),请获取ZoneId格式的时区并提供我的后端,以便确定必要的日期和时间调整。与此类似
>>> var timezone = jstz.determine();
>>> timezone.name();
"Europe/London"
在https://pub.dartlang.org/packages/timezone中出现
任何见解都会非常有帮助。
预先感谢
答案 0 :(得分:0)
进行一些挖掘之后,我发现了针对该问题的(临时)解决方法。
使用
var now = new DateTime.now();
var timezoneOffset = now.timeZoneOffset;
我扑朔迷离地得到了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();
结果,我采用了用户设备中规定的本地时间和日期,而不使用任何定位服务,这是我从一开始就追求的目标。
直到现在,我还没有遇到任何问题...我们将看到...
答案 1 :(得分:0)
我也一直在寻找这个,这是我发现的:https://pub.dev/packages/flutter_native_timezone
它有点笨拙,但似乎可以在iOS和Android上正常工作。希望这会帮助有需要的人。 干杯!
答案 2 :(得分:0)
提出一个简单的解决方案:
//server time(UTC)
String date_to_parse = "2019-06-23 12:59:43.444896+00:00";
DateTime server_datetime = DateTime.parse(date_to_parse);
//get current system local time
DateTime local_datetime = DateTime.now();
//get time diff
var timezoneOffset = local_datetime.timeZoneOffset;
var time_diff = new Duration(hours: timezoneOffset.inHours, minutes: timezoneOffset.inMinutes % 60);
//adjust the time diff
var new_local_time = server_datetime.add(time_diff);
答案 3 :(得分:0)
您可以简单地将.toLocale()
添加到DateTime对象中。
myDate = otherDate.toLocal();
myDate = DateTime.parse(json['server_date']).toLocal();
答案 4 :(得分:0)
DateTime.now().timeZoneOffset // +5:30:00.000000 is expected format