format method

String format({
  1. String pattern = 'dd-MM-yyyy',
})

Implementation

String format({String pattern = 'dd-MM-yyyy'}) {
  if (this == null) {
    return ""; // Return empty string if DateTime is null
  }

  final daysOfWeek = [
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday',
    'Sunday'
  ];
  final monthsOfYear = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
  ];

  final isPM = this!.hour >= 12;
  final hour12 = this!.hour % 12 == 0 ? 12 : this!.hour % 12;

  final replacements = {
    "yyyy": this!.year.toString(),
    "yy": this!.year.toString().substring(2),
    "MMMM": monthsOfYear[this!.month - 1],
    "MMM": monthsOfYear[this!.month - 1].substring(0, 3),
    "MM": this!.month.toString().padLeft(2, '0'),
    "M": this!.month.toString(),
    "dd": this!.day.toString().padLeft(2, '0'),
    "d": this!.day.toString(),
    "EEEE": daysOfWeek[this!.weekday - 1],
    "EEE": daysOfWeek[this!.weekday - 1].substring(0, 3),
    "E": daysOfWeek[this!.weekday - 1].substring(0, 3), // Short day name
    "HH": this!.hour.toString().padLeft(2, '0'),
    "H": this!.hour.toString(),
    "hh": hour12.toString().padLeft(2, '0'),
    "h": hour12.toString(),
    "mm": this!.minute.toString().padLeft(2, '0'),
    "m": this!.minute.toString(),
    "ss": this!.second.toString().padLeft(2, '0'),
    "s": this!.second.toString(),
    "SSS": this!.millisecond.toString().padLeft(3, '0'),
    "a": isPM ? "PM" : "AM",
    "Q": ((this!.month - 1) ~/ 3 + 1).toString(), // Quarter
    "DD": this!.dayOfYear().toString().padLeft(3, '0'),
    "D": this!.dayOfYear().toString(),
    "ww": this!.weekOfYear().toString().padLeft(2, '0'),
    "w": this!.weekOfYear().toString(),
    "u": this!.weekday.toString(), // Day of week numeric (1-7)
  };

  var formatted = pattern;
  replacements.forEach((key, value) {
    formatted = formatted.replaceAll(key, value);
  });

  return formatted;
}