How to Format DateTime in Flutter

Flutter’s DateTime class is a core component that simplifies handling date and time values in your app. Whether you’re building a scheduling app, a calendar, or simply displaying timestamps, mastering this class is a must.

Here’s why DateTime is essential:

  • It allows representation of specific moments, including the date and time.
  • It supports both UTC and local time zones.
  • It integrates seamlessly with libraries like intl for formatting and localization.

Key Features of DateTime Class:

Feature Description
Initialization Create objects with DateTime.now().
Parsing Convert strings into DateTime objects.
Formatting Display dates and times in user-friendly ways.

How to Format DateTime in Flutter

Formatting DateTime in Flutter requires using libraries like intl. The intl package is a versatile tool for formatting and parsing dates, numbers, and more.

Step-by-Step Guide:

1. Add the intl Package

To start, include the intl package in your pubspec.yaml file:

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.0

Run the following command to fetch the package:

flutter pub get

2. Import the Package

Import the package in your Dart file:

import 'package:intl/intl.dart';

3. Format the DateTime Object

Use DateFormat to create custom date formats. Here’s an example:

void main() {
  DateTime now = DateTime.now();
  String formattedDate = DateFormat('yyyy-MM-dd').format(now);
  print(formattedDate); // Outputs: 2024-12-20
}

4. Handle Localization

Localizing your app’s date and time format improves user experience. Add localization delegates in your app:

MaterialApp(
  localizationsDelegates: [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
  supportedLocales: [
    const Locale('en', 'US'),
    const Locale('es', 'ES'),
  ],
);

Also Read :- How to Add Filter List in Flutter


Best Practices for Formatting DateTime in Flutter

1. Choose Readable Formats

Use formats that align with your app’s user base. For example:

Locale Format Example
US (mm/dd/yyyy) 12/20/2024
UK (dd/mm/yyyy) 20/12/2024

2. Avoid Hardcoding Formats

Always use libraries like intl for maintainability and flexibility.

3. Leverage Time Zones

For global apps, ensure that DateTime values respect user time zones:

DateTime utcTime = DateTime.now().toUtc();
DateTime localTime = utcTime.toLocal();

Also Read :- How to Embed YouTube Video in Flutter


Common DateTime Formats in Flutter

Below are frequently used formats for various use cases:

Format Description Example Output
yyyy-MM-dd ISO date format 2024-12-20
MM/dd/yyyy US date format 12/20/2024
dd-MM-yyyy European date format 20-12-2024
EEEE, MMMM d, yyyy Full date with day name Friday, December 20, 2024
HH:mm:ss 24-hour time format 14:30:45
hh:mm a 12-hour time format with AM/PM 02:30 PM

Parsing Strings into DateTime

Parsing a string into a DateTime object is a frequent task. Use the following approach:

String dateString = "2024-12-20";
DateTime parsedDate = DateTime.parse(dateString);
print(parsedDate); // Outputs: 2024-12-20 00:00:00.000

For custom formats:

String dateString = "20/12/2024";
DateTime parsedDate = DateFormat("dd/MM/yyyy").parse(dateString);
print(parsedDate); // Outputs: 2024-12-20 00:00:00.000

Also Read :- How to Enable Flutter Desktop


Displaying Relative Time

To display relative time (e.g., “2 days ago” or “in 3 hours”), consider using libraries like timeago:

dependencies:
  timeago: ^3.0.0
import 'package:timeago/timeago.dart' as timeago;

void main() {
  DateTime past = DateTime.now().subtract(Duration(days: 2));
  print(timeago.format(past)); // Outputs: 2 days ago
}

Handling Edge Cases in DateTime

1. Null Safety

Ensure null safety to avoid crashes:

DateTime? nullableDate;
String formatted = nullableDate != null ? DateFormat.yMd().format(nullableDate) : "Not available";

2. Leap Years

Verify leap year handling for date calculations:

bool isLeapYear(int year) {
  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

Also Read :- How to Expand Container Flutter


FAQs About DateTime in Flutter

1. What is the default format of DateTime in Flutter?
DateTime uses ISO 8601 format by default, such as 2024-12-20T14:30:45.000.

2. How can I display a localized date in Flutter?
Use the intl package and set the desired locale with DateFormat.

3. What is the difference between UTC and local time in Flutter?
UTC is Coordinated Universal Time, whereas local time adapts to the user’s timezone.

4. Can I format time only without the date?
Yes, use formats like HH:mm for 24-hour or hh:mm a for 12-hour clocks.

5. How do I add days to a DateTime object?
Use the add method:

DateTime newDate = DateTime.now().add(Duration(days: 5));

6. How do I subtract days from a DateTime?
Use the subtract method:

DateTime pastDate = DateTime.now().subtract(Duration(days: 5));

7. What package should I use for advanced DateTime handling?
Use intl for formatting and timeago for relative time.

8. Can I parse custom date formats?
Yes, use DateFormat to parse custom formats.

9. How can I check if two dates are the same?
Compare year, month, and day manually:

bool isSameDay(DateTime date1, DateTime date2) {
  return date1.year == date2.year && date1.month == date2.month && date1.day == date2.day;
}

10. Does Flutter support time zones?
Yes, DateTime supports both UTC and local time zones.

11. How do I display the current day name?
Use DateFormat('EEEE'):

String dayName = DateFormat('EEEE').format(DateTime.now());

12. How do I convert DateTime to a string?
Use toString() for default format or DateFormat for custom formats.

13. How do I handle daylight saving time in Flutter?
DateTime adjusts automatically based on the local system’s time settings.

14. Can I use DateTime for countdown timers?
Yes, calculate the difference using Duration and update your UI accordingly.

15. What is the maximum value of DateTime in Flutter?
The maximum is DateTime(9999, 12, 31).

16. How do I convert UTC to local time?
Use the toLocal() method:

DateTime localTime = DateTime.now().toUtc().toLocal();

17. Can I convert local time to UTC?
Yes, use toUtc():

DateTime utcTime = DateTime.now().toUtc();

18. How do I format dates with ordinal indicators (1st, 2nd)?
Use custom logic:

String getOrdinalDate(int day) {
  if (day >= 11 && day <= 13) return '${day}th';
  switch (day % 10) {
    case 1: return '${day}st';
    case 2: return '${day}nd';
    case 3: return '${day}rd';
    default: return '${day}th';
  }
}

19. How can I format a timestamp?
Convert the timestamp into DateTime first:

DateTime.fromMillisecondsSinceEpoch(timestamp);

20. Is intl the only package for DateTime formatting?
While intl is the most popular, other packages like jiffy or timeago are available for specific use cases.

Nishant Sharma
Latest posts by Nishant Sharma (see all)

Leave a Comment