format method
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;
}