Mam wystąpienie DateTime
i chciałbym sformatować go na String. Jak mogę to zrobić? Chcę zmienić datę w ciąg znaków, coś w rodzaju „2013-04-20”.
163
Możesz użyć intl
pakietu ( instalatora ) do formatowania dat.
W przypadku en_US
formatów jest to dość proste:
import 'package:intl/intl.dart';
main() {
final DateTime now = DateTime.now();
final DateFormat formatter = DateFormat('yyyy-MM-dd');
final String formatted = formatter.format(now);
print(formatted); // something like 2013-04-20
}
Istnieje wiele opcji formatowania. Z dokumentów:
ICU Name Skeleton
-------- --------
DAY d
ABBR_WEEKDAY E
WEEKDAY EEEE
ABBR_STANDALONE_MONTH LLL
STANDALONE_MONTH LLLL
NUM_MONTH M
NUM_MONTH_DAY Md
NUM_MONTH_WEEKDAY_DAY MEd
ABBR_MONTH MMM
ABBR_MONTH_DAY MMMd
ABBR_MONTH_WEEKDAY_DAY MMMEd
MONTH MMMM
MONTH_DAY MMMMd
MONTH_WEEKDAY_DAY MMMMEEEEd
ABBR_QUARTER QQQ
QUARTER QQQQ
YEAR y
YEAR_NUM_MONTH yM
YEAR_NUM_MONTH_DAY yMd
YEAR_NUM_MONTH_WEEKDAY_DAY yMEd
YEAR_ABBR_MONTH yMMM
YEAR_ABBR_MONTH_DAY yMMMd
YEAR_ABBR_MONTH_WEEKDAY_DAY yMMMEd
YEAR_MONTH yMMMM
YEAR_MONTH_DAY yMMMMd
YEAR_MONTH_WEEKDAY_DAY yMMMMEEEEd
YEAR_ABBR_QUARTER yQQQ
YEAR_QUARTER yQQQQ
HOUR24 H
HOUR24_MINUTE Hm
HOUR24_MINUTE_SECOND Hms
HOUR j
HOUR_MINUTE jm
HOUR_MINUTE_SECOND jms
HOUR_MINUTE_GENERIC_TZ jmv
HOUR_MINUTE_TZ jmz
HOUR_GENERIC_TZ jv
HOUR_TZ jz
MINUTE m
MINUTE_SECOND ms
SECOND s
W przypadku innych niż en_US
daty musisz jawnie załadować ustawienia regionalne. Zobacz DateFormat
dokumentację, aby uzyskać więcej informacji. date_symbol_data_local.dart
Zawiera wszystkich formatów dla każdego kraju / języka, jeśli chcesz spojrzeć bardziej dogłębne.
To też zadziała:
DateTime today = new DateTime.now(); String dateSlug ="${today.year.toString()}-${today.month.toString().padLeft(2,'0')}-${today.day.toString().padLeft(2,'0')}"; print(dateSlug);
źródło
Możesz również określić format daty, jak podano wcześniej: https://pub.dartlang.org/documentation/intl/latest/intl/DateFormat-class.html
import 'package:intl/intl.dart'; String formatDate(DateTime date) => new DateFormat("MMMM d").format(date);
Produkuje:
March 4
źródło
Jeśli ktoś chce przekonwertować datę w formacie ciągu na inny format ciągu, najpierw użyj DateTime.parse ("2019-09-30"), a następnie przekaż go do DateFormat ("wzorzec daty"). Format () jak
dateFormate = DateFormat("dd-MM-yyyy").format(DateTime.parse("2019-09-30"));
Odniesienie: Dart - Jak zmienić format prostego ciągu daty w formacie rrrr-MM-dd na dd-MM-rrrr
źródło
DateFormat
ale twój tekst mówiDateTime.format()
To daje datę jak w sieci społecznościowej: [„dzisiaj”, „wczoraj”, „dzień tygodnia” itd.]
void main() { DateTime now = new DateTime(2018,6,26); print(date(now)); } String date(DateTime tm) { DateTime today = new DateTime.now(); Duration oneDay = new Duration(days: 1); Duration twoDay = new Duration(days: 2); Duration oneWeek = new Duration(days: 7); String month; switch (tm.month) { case 1: month = "january"; break; case 2: month = "february"; break; case 3: month = "march"; break; case 4: month = "april"; break; case 5: month = "may"; break; case 6: month = "june"; break; case 7: month = "july"; break; case 8: month = "august"; break; case 9: month = "september"; break; case 10: month = "october"; break; case 11: month = "november"; break; case 12: month = "december"; break; } Duration difference = today.difference(tm); if (difference.compareTo(oneDay) < 1) { return "today"; } else if (difference.compareTo(twoDay) < 1) { return "yesterday"; } else if (difference.compareTo(oneWeek) < 1) { switch (tm.weekday) { case 1: return "monday"; case 2: return "tuesday"; case 3: return "wednesday"; case 4: return "thursday"; case 5: return "friday"; case 6: return "saturday"; case 7: return "sunday"; } } else if (tm.year == today.year) { return '${tm.day} $month'; } else { return '${tm.day} $month ${tm.year}'; } }
źródło
Istnieje pakiet date_format
kod
import 'package:date_format/date_format.dart'; final formattedStr = formatDate( yourDateTime, [dd, '.', mm, '.', yy, ' ', HH, ':', nn]); // output example "29.03.19 07:00"
Uwaga: minuty to nn
link do pakietu
źródło
pubspec.yaml:
main.dart:
import 'package:intl/intl.dart'; // for date format import 'package:intl/date_symbol_data_local.dart'; // for other locales void main() { var now = DateTime.now(); print(DateFormat().format(now)); // This will return date using the default locale print(DateFormat('yyyy-MM-dd hh:mm:ss').format(now)); print(DateFormat.yMMMMd().format(now)); // print long date print(DateFormat.yMd().format(now)); // print short date print(DateFormat.jms().format(now)); // print time initializeDateFormatting('es'); // This will initialize Spanish locale print(DateFormat.yMMMMd('es').format(now)); // print long date in Spanish format print(DateFormat.yMd('es').format(now)); // print short date in Spanish format print(DateFormat.jms('es').format(now)); // print time in Spanish format }
Wynik:
May 31, 2020 5:41:42 PM 2020-05-31 05:41:42 May 31, 2020 5/31/2020 5:41:42 PM 31 de mayo de 2020 31/5/2020 17:41:42
źródło
Możesz również użyć tej metody, jeśli nie chcesz dodawać kolejnej biblioteki
DateTime dateTime = DateTime.now(); String YYYY_MM_DD = dateTime.toIso8601String().split('T').first; print(YYYY_MM_DD);
źródło
obsługując kwartały roczne, od stringa do DateTime, nie znalazłem odpowiedniego rozwiązania, więc zrobiłem to:
List<String> dateAsList = 'Q1 2001'.split(' '); DateTime dateTime = DateTime.now(); String quarter = dateAsList[0]; int year = int.parse(dateAsList[1]); switch(quarter) { case "Q1": dateTime = DateTime(year, 1); break; case "Q2": dateTime = DateTime(year, 4); break; case "Q3": dateTime = DateTime(year, 7); break; case "Q4": dateTime = DateTime(year, 10); break; }
źródło
W przypadku, gdy chcesz połączyć kilka formatów daty w jeden, oto jak możemy to zrobić za pomocą
intl
.DateFormat('yMMMd').addPattern(DateFormat.HOUR24_MINUTE).format(yourDateTime))
źródło
String formatDate(String date) { return date.substring(0, 10).split('-').reversed.join().replaceAll('-', '/'); }
Z formatu „rrrr-mm-dd H: i: s”
źródło
import 'package:intl/intl.dart'; main() { var formattedDate = new DateTime.Format('yyyy-MM-dd').DateTime.now(); print(formattedDate); // something like 2020-04-16 }
Więcej informacji można znaleźć w dokumentacji DateFormat
źródło