#firebase #flutter #timestamp
#firebase #flutter #временная метка
Вопрос:
Я использую DatePicker, как показано ниже, чтобы позволить пользователю устанавливать дату. Я хочу сохранить эту выбранную дату и время в Firebase в качестве метки времени. Как мне это сделать?
Спасибо.
showDatePicker(
context: context,
initialDate: widget.isUpdating
? _currentExpense.createdAt.toDate()
: _dateTime, //_currentExpense.createdAt == null,
firstDate: DateTime(2001),
lastDate: DateTime.now())
.then((date) {
_dateTime = date;
setState(() {
dateTimeText = _getDateString(date);
});
});
Ответ №1:
Вы можете использовать dateTimeObject.millisecondsSinceEpoch
для преобразования его в an int
и сохранения в своей базе данных.
А затем использовать DateTime.fromMillisecondsSinceEpoch(msIntFromServer)
для преобразования его обратно в объект DateTime.
Или, если вы хотите еще большей точности, вы можете сделать это за микросекунды.
https://api.flutter.dev/flutter/dart-core/DateTime-class.html
Комментарии:
1. Спасибо! Итак, чтобы уточнить, временная метка в основном сохраняется как / в миллисекундах или микросекундах?
2. Кроме того, использование вашего предложения означает, что я должен сохранить _currentExpense.createdAt как int в моей БД, а не как временную метку? В моем setState() я сделал _currentExpense.createdAt = _dateTime.millisecondsSinceEpoch в качестве временной метки; но он не был успешно сохранен в DB, поскольку ожидал временную метку, и я отправляю int в качестве значения.
3. @hermie_brown Я просто говорю, что вы могли бы сохранить его как int. Если вы уже используете указанный формат для временной метки в своей базе данных, вам следует ознакомиться с документами firebase или библиотекой, которую вы используете, о том, как отформатировать временную метку в этот формат.
Ответ №2:
Я понял это. Я видел сообщение в этих группах Google, оно хорошо соответствовало более раннему предложению Er1.
Для тех, кто ищет, вот хак:
Timestamp _dateTimeToTimestamp(DateTime dateTime) {
return Timestamp.fromMillisecondsSinceEpoch(
dateTime.millisecondsSinceEpoch);
}
onTap: () {
showDatePicker(
context: context,
initialDate: widget.isUpdating
? _currentExpense.updatedAt.toDate()
: DateTime.now(),
firstDate: DateTime(2001),
lastDate: DateTime.now())
.then((date) {
_dateTime = date;
print(_dateTime);
setState(() {
dateTimeText = _dateTimeToString(_dateTime);
if (widget.isUpdating) {
_currentExpense.updatedAt = _dateTimeToTimestamp(_dateTime);
} else {
//this is new entry
_currentExpense.createdAt = _dateTimeToTimestamp(_dateTime);
_currentExpense.updatedAt = _dateTimeToTimestamp(_dateTime);
}
});
});