Вы должны реализовать это; и вам придется немного поэкспериментировать, так как вы еще не сказали, что на самом деле предоставляет ваш сервер. Также следует отметить, что дата Дарт поддерживает только два часовых пояса: 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]);
Это даст вам DateTime
в TZ телефона:
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,
);