web-dev-qa-db-fra.com

comment imprimer l'horodatage Firestore en tant que date et heure formatées en flutter

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'

3
aryan singh

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
1

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
0
Ashutosh Singh

Faites comme ça:

DateFormat.yMMMd().add_jm().format(DateTime.parse(snapshot.data.documents[index].data['timestamp'].toDate().toString())]
0
Jaycee

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

0
worldpotato