Timestamp to LocalDateTime преобразование - PullRequest
0 голосов
/ 17 июня 2020

Я читаю дату из Firestore типа Timestamp и хочу, чтобы она была преобразована в тип LocalDateTime.

Для этого я использовал следующую процедуру:

  • Преобразование метки времени в DateTime
  • Используйте метод .dateTime для LocalDateTime, чтобы преобразовать его в LocalDateTime
  • Вручную настройте его на мое местное время

LocalDateTime.dateTime(entity.start.toDate()).addHours(2),

Хотя entity.start.toDate() имеет мое местное время, .dateTime выполняет некоторые настройки, а я получаю другое время.

Кроме того, этот метод подвержен ошибкам, поскольку я что-то настраиваю вручную.

Другой способ сделать это - следующий, но я считаю его слишком длинным:

DateTime hStartDate = entity.start.toDate();
LocalDateTime(hStartDate.year,hStartDate.month,hStartDate.day,hStartDate.hour,hStartDate.minute,0)

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Вы можете добиться этого, используя метод toLocal () .

что-то вроде этого.

_getDate(//timestamp, "yyyy.dd.MM, HH:mm");

String _getDate(int timestamp, String dateFormat) {
  DateTime date = DateTime.fromMillisecondsSinceEpoch(
    timestamp * 1000,
  ).toLocal();
  String formattedDateTime = DateFormat(dateFormat).format(date);
  return formattedDateTime;
}
0 голосов
/ 17 июня 2020

У меня были похожие проблемы. Я не смог найти способ снова преобразовать строку Timestamp в объект Timestamp. Так что я использовал этот выход.

При сохранении данных в firestore:

Используйте -

DateTime.now().toString()

Пример:

 await Firestore.instance
        .collection("users/$docId/tokens")
        .document(fcm.deviceToken)
        .setData({
      "token": fcm.deviceToken,
      "timestamp": DateTime.now().toString()
    });

Когда вы получаете данные из firestore и получаете строку отметки времени:

Используйте это, чтобы получить DateTime объект -

DateTime dateTime = DateTime.parse(timestamp)

Используйте это, чтобы получить TimeOfDay объект -

TimeOfDay timeOfDay = TimeOfDay.fromDateTime(dateTime);
timeOfDay.format(context);
...