如何从Flatter';s日期时间选择器,并将其作为时间戳写入Firebase
我使用如下的日期选择器来允许用户设置日期。我想将此选定日期和时间保存为Firebase的时间戳。我该怎么做 谢谢如何从Flatter';s日期时间选择器,并将其作为时间戳写入Firebase,firebase,flutter,timestamp,Firebase,Flutter,Timestamp,我使用如下的日期选择器来允许用户设置日期。我想将此选定日期和时间保存为Firebase的时间戳。我该怎么做 谢谢 showDatePicker( context: context, initialDate: widget.isUpdating ? _currentExpense.createdAt.toDate() : _dateTime, //_currentExpense.createdAt ==
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);
});
});
您可以使用
dateTimeObject.millissecondssinceepoch
将其转换为int
,并将其保存到数据库中
然后使用DateTime.fromsintfromsincepoch(msIntFromServer)
将其转换回DateTime对象
或者如果你想要更高的精确度,你可以在几微秒内完成
您可以使用
dateTimeObject.millissecondssinceepoch
将其转换为int
并保存到数据库中
然后使用DateTime.fromsintfromsincepoch(msIntFromServer)
将其转换回DateTime对象
或者如果你想要更高的精确度,你可以在几微秒内完成
我想出来了。我在网上看到一个帖子 这完全符合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);
}
});
});
我想出来了。我在网上看到一个帖子 这完全符合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);
}
});
});
谢谢所以,为了澄清,时间戳基本上是以毫秒或微秒的形式保存的?而且,使用您的建议意味着我必须在我的数据库中将_currentExpense.createdAt保存为int,而不是时间戳?在我的setState()中,我做了,_currentExpense.createdAt=_dateTime.millissecondssinceepoch作为时间戳;但是它没有成功地保存到DB,因为它需要一个时间戳,而我正在发送一个int作为值。@hermie_brown我只是说你可以将它保存为int。如果你已经在DB中使用了指定的时间戳格式,你应该看看firebase或你正在使用的库中的文档,了解如何将时间戳格式化为该格式格式。谢谢!所以,为了澄清,时间戳基本上是以毫秒或微秒的形式保存的?而且,使用您的建议意味着我必须在我的数据库中将_currentExpense.createdAt保存为int,而不是时间戳?在我的setState()中,我做了,_currentExpense.createdAt=_dateTime.millissecondssinceepoch作为时间戳;但是它没有成功地保存到DB,因为它需要一个时间戳,而我正在发送一个int作为值。@hermie_brown我只是说你可以将它保存为int。如果你已经在DB中使用了一种指定的时间戳格式,你应该看看firebase或你正在使用的库中的文档,了解如何将时间戳格式化为该格式。