timestamp return aa Timestamp(seconds=1560523991, nanoseconds=286000000)
in flutter firestore snapshot
Je veux imprimer la date et l'heure correctement formatées
J'utilise DateTime.now () pour stocker le DateTime actuel dans le Firestore tout en créant de nouveaux enregistrements et en le récupérant à l'aide d'un instantané Firestore mais en retournant le format que je convertis en format date/heure formaté, pour le formatage, j'utilise lib intl.Dart
code pour enregistrer les données
d={'amount':amount,
'desc':desc,
'user_id':user_id,
'flie_ref':url.toString(),
'date':'${user_id}${DateTime.now().day}-${DateTime.now().month}-${DateTime.now().year}',
'timestamp':DateTime.now()
return Firestore.instance.collection ('/ data'). add (d) .then ((v) {return true;}). catchError ((onError) => print (onError)); });
Accès avec
FutureBuilder(
future: Firestore.instance
.collection('data')
.where('user_id', isEqualTo:_user_id)
.getDocuments(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData)
return Container(
child: Center(child: CircularProgressIndicator()));
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
return Column(
children: <Widget>[
Text(DateFormat.yMMMd().add_jm().format(DateTime.parse(snapshot.data.documents[index].data['timestamp'].toString())]);
....
le lancement de l'erreur est un format de date non valide.
Je m'attends à ce que la sortie soit: '17 janvier 2019, 14h19'
Voici le chemin!
Firestore renverra TimeStamp comme Timestamp (secondes = 1560523991, nanosecondes = 286000000).
Cela peut être analysé comme
Timestamp t = document['timeFieldName'];
DateTime d = t.toDate();
print(d.toString()); //2019-12-28 18:48:48.364
Vous pouvez convertir directement l'objet d'horodatage Firestore en DateTime comme ceci:
DateTime myDateTime = (snapshot.data.documents[index].data['timestamp']).toDate();
Cela retournera votre horodatage Firestore au format DateTime de Dart. Afin de convertir votre objet DateTime
, vous pouvez utiliser la classe DateFormat
du package intl . Vous pouvez utiliser votre objet DateTime obtenu pour obtenir le format de votre choix comme ceci:
DateFormat.yMMMd().add_jm().format(myDateTime);
Ce code produit une sortie comme celle-ci:
Apr 21, 2020 5:33 PM
Faites comme ça:
DateFormat.yMMMd().add_jm().format(DateTime.parse(snapshot.data.documents[index].data['timestamp'].toDate().toString())]
Vous obtiendrez un horodatage Unix de Firestore même si vous envoyez un DateTime à Firestore.
Vous pouvez analyser un DateTime de Firestore avec DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
La classe DateTime a deux options pour renvoyer une piqûre. toIso8601String()
ou toString()
choisissez celle dont vous avez besoin. Ou utilisez par exemple. DateTime.now (). Hour; pour obtenir le notre et créer votre propre sortie.
Pour plus d'informations: Vérifiez https://api.dartlang.org/stable/2.4.0/Dart-core/DateTime-class.html