Flutter时区(作为ZoneId)

时间:2018-07-16 12:27:51

标签: timezone flutter

我对Flutter相对较新。在进行实验时,遇到了一个问题。我的REST Api使用时区参数(区域ID格式,例如Europe / London)。

我看到了cmsis filehttps://pub.dartlang.org/packages/flutter_native_timezone,但都没有满足我的需求。

我的目标是,当用户连接到互联网时(如果可能,不授予应用程序任何位置访问权限),请获取ZoneId格式的时区并提供我的后端,以便确定必要的日期和时间调整。与此类似

>>> var timezone = jstz.determine();
>>> timezone.name(); 
"Europe/London"

https://pub.dartlang.org/packages/timezone中出现

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

预先感谢

5 个答案:

答案 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