你需要实现它;由于你没有说明服务器提供了什么,所以你需要进行一些实验。还要注意的是,Dart的日期只支持两个时区:UTC或本地时间。(
timezone
包提供了整个奥尔森数据库,用于操作其他时区。)
根据问题中的数字和你提问的时间,我们假设日期是在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]);
这将为您获取手机所在时区的
DateTime
:
var local = DateTime.fromMillisecondsSinceEpoch(millis);
这将为您提供UTC时间:
最初的回答:
var utc = DateTime.fromMillisecondsSinceEpoch(millis, isUtc: true);
这将为您提供雅典和协调世界时之间的偏移量,但可能没有用处:(请注意,即使我们可以推断出您的服务器位于雅典(或类似的时区),但如果不使用时区包,我们无法获取雅典时区的日期 - 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,
);