我应该在Flutter应用中使用的API响应包含JSON格式的日期,格式如下:/ Date(1559985189000 + 0300)/
解析时,我有以下异常: FormatException(FormatException:无效的日期格式 /日期(1559985189000 + 0300)/)
我使用以下代码来解析:date: DateTime.parse(json["Date"])
日期字符串对我来说似乎是unix的时间戳。
是否有内置的方法将此日期字符串解析为Flutter中的DateTime,还是应该实现它?
非常感谢!
答案 0 :(得分:1)
您必须实现它;而且您还需要进行一些实验,因为您还没有说服务器实际提供了什么。还需要注意的是,Dart的日期仅支持两个时区:UTC或本地时间。 (timezone
程序包提供了用于处理其他时区的整个Olsen数据库。)
根据问题中的数字以及您提出的问题进行猜测,我们假设日期使用UTC,但是服务器使用UTC + 3(例如,希腊雅典)。
首先解析相关位:
var raw = '/Date(1559985189000+0300)/';
var numeric = raw.split('(')[1].split(')')[0];
var negative = numeric.contains('-');
var parts = numeric.split(negative ? '-' : '+');
var millis = int.parse(parts[0]);
这将使您在手机的TZ位置DateTime
:
var local = DateTime.fromMillisecondsSinceEpoch(millis);
这将为您提供UTC时间:
var utc = DateTime.fromMillisecondsSinceEpoch(millis, isUtc: true);
这将为您提供雅典和UTC之间的偏移量,但可能无用:(请注意,即使我们可以推断出您的服务器位于雅典(或类似的TZ),我们也无法使用雅典时区获取日期时区软件包-Dart仅支持UTC或手机的时间(可能在苏黎世)
final multiplier = negative ? -1 : 1;
var offset = Duration(
hours: int.parse(parts[1].substring(0, 2)) * multiplier,
minutes: int.parse(parts[1].substring(2)) * multiplier,
);