Heures avec DateFormat
Fait partie de la section Données et réseau du Journey Flutter de Coddy. Leçon 21 sur 27.
Le même DateTime contient aussi l’heure, et DateFormat la formate avec ses propres lettres :
final start = DateTime.parse('2026-11-03T18:30:00');
DateFormat('h:mm a').format(start) // 6:30 PM
DateFormat('HH:mm').format(start) // 18:30h correspond à l’heure sur une horloge de 12 heures et H sur une horloge de 24 heures, mm aux minutes, et a ajoute AM ou PM. Deux lettres conservent un zéro initial : HH écrit 9 heures sous la forme 09.
Fais encore attention aux majuscules. mm en minuscules correspond aux minutes et MM en majuscules au mois : h:MM a transforme 18 h 30 en novembre en 6:11 PM, car novembre est le mois 11.
Défi
FacileAffiche l’heure de début de chaque événement : ajoute à chaque ListTile un texte trailing indiquant l’heure, afin que le premier événement affiche 6:30 PM.
Essayez vous-même
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'api.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: EventsScreen(),
);
}
}
class EventsScreen extends StatefulWidget {
const EventsScreen({super.key});
@override
State<EventsScreen> createState() => _EventsScreenState();
}
class _EventsScreenState extends State<EventsScreen> {
late Future<List<Event>> _events;
@override
void initState() {
super.initState();
_events = loadEvents();
}
Future<List<Event>> loadEvents() async {
final body = await fetch('/events');
final items = jsonDecode(body) as List<dynamic>;
return items.map((item) => Event.fromJson(item as Map<String, dynamic>)).toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Events')),
body: FutureBuilder<List<Event>>(
future: _events,
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(child: Text('Could not load: ${snapshot.error}'));
}
if (snapshot.hasData) {
final events = snapshot.data!;
return ListView.builder(
itemCount: events.length,
itemBuilder: (context, index) {
final event = events[index];
return ListTile(
title: Text(event.title),
subtitle: Text(DateFormat('EEE, MMM d').format(event.start)),
);
},
);
}
return const Center(child: CircularProgressIndicator());
},
),
);
}
}
class Event {
Event({required this.title, required this.start});
final String title;
final DateTime start;
factory Event.fromJson(Map<String, dynamic> json) {
return Event(
title: json['title'] as String,
start: DateTime.parse(json['start'] as String),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Données et réseau
Entraînez-vous par vous-même : Compilateur Flutter en ligne