Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj klas w Windows.Globalization.DateTimeFormatting przestrzeni nazw z szablonami niestandardowymi i wzorcami, aby wyświetlić daty i godziny dokładnie w formacie, który chcesz.
Wprowadzenie
Klasa DateTimeFormatter udostępnia różne sposoby poprawnego formatowania dat i godzin dla języków i regionów na całym świecie. Możesz używać standardowych formatów dla roku, miesiąca, dnia itd. Możesz też przekazać wzorzec formatowania jako argument formatTemplate w konstruktorze DateTimeFormatter, taki jak "longdate" lub "dzień miesiąca".
Jeśli jednak chcesz mieć jeszcze większą kontrolę nad kolejnością i formatem składników obiektu DateTime , które chcesz wyświetlić, możesz przekazać wzorzec formatu do argumentu formatTemplate konstruktora. Wzorzec formatu używa specjalnej składni, która umożliwia uzyskanie poszczególnych składników obiektu DateTime — tylko nazwy miesiąca lub tylko wartości roku — na przykład w celu wyświetlenia ich w wybranym formacie niestandardowym. Ponadto wzorzec można lokalizować w celu dostosowania do innych języków i regionów.
Uwaga To jest tylko ogólny zarys wzorców formatów. Aby uzyskać bardziej kompletną dyskusję na temat szablonów formatów i wzorców formatów, zobacz sekcję Uwagi klasy DateTimeFormatter .
Różnica między szablonami formatów a wzorcami formatowania
Szablon formatu to kulturowo neutralny ciąg formatujący. Dlatego jeśli skonstruujesz element DateTimeFormatter przy użyciu szablonu formatu, formatujący wyświetla składniki formatu w odpowiedniej kolejności dla bieżącego języka. Z drugiej strony wzorzec formatu jest specyficzny dla kultury. Jeśli skonstruujesz element DateTimeFormatter przy użyciu wzorca formatu, formater będzie używać wzorca dokładnie tak jak podane. W związku z tym wzorzec nie musi być prawidłowy w różnych kulturach.
Zilustrujmy to rozróżnienie z przykładem. Przekażemy prosty szablon formatu (a nie wzorzec) do konstruktora DateTimeFormatter . Jest to szablon formatu "dzień miesiąca".
var dateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("month day");
Spowoduje to utworzenie formatującego na podstawie wartości języka i regionu bieżącego kontekstu. Kolejność składników w szablonie formatu nie ma znaczenia; program formatujący wyświetla je w odpowiedniej kolejności dla bieżącego języka. Dlatego wyświetla wartość "1 stycznia" dla języka angielskiego (Stany Zjednoczone), "1 janvier" dla języka francuskiego (Francja) i "1月1日" dla języka japońskiego.
Z drugiej strony wzorzec formatu jest specyficzny dla kultury. Uzyskajmy dostęp do wzorca formatu dla naszego szablonu formatu.
IReadOnlyList<string> monthDayPatterns = dateFormatter.Patterns;
Daje to różne wyniki w zależności od języka i regionu środowiska uruchomieniowego. Różne regiony mogą używać różnych składników w różnych kolejności, z dodatkowymi znakami i odstępami lub bez nich.
En-US: "{month.full} {day.integer}"
Fr-FR: "{day.integer} {month.full}"
Ja-JP: "{month.integer}月{day.integer}日"
W powyższym przykładzie wprowadziliśmy ciąg formatu niezależny od kultury i otrzymaliśmy ciąg formatu specyficzny dla kultury (który był funkcją języka i regionu obowiązującego w momencie wywołania dateFormatter.Patterns). Wynika z tego, że w przypadku konstruowania elementu DateTimeFormatter na podstawie wzorca formatu specyficznego dla kultury będzie on prawidłowy tylko dla określonych języków/regionów.
var dateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("{month.full} {day.integer}");
Powyższy formater zwraca kulturowo specyficzne wartości dla poszczególnych składników w nawiasach {}. Jednak kolejność składników we wzorcu formatu jest niezmienna. Dokładnie dowiesz się, o co prosisz, co może być lub nie jest odpowiednie kulturowo. Ten formater jest prawidłowy dla języka angielskiego (Stany Zjednoczone), ale nie dla języka francuskiego (Francja) ani japońskiego.
En-US: January 1
Fr-FR: janvier 1 (inappropriate for France; non-standard order)
Ja-JP: 1月1 (inappropriate for Japan; the day symbol 日 is missing)
Ponadto wzorzec, który jest poprawny dzisiaj, może nie być poprawny w przyszłości. Kraje lub regiony mogą zmieniać swoje systemy kalendarzowe, co skutkuje zmianą szablonu formatu. System Windows aktualizuje dane wyjściowe formaterów na podstawie szablonów formatów, aby uwzględnić takie zmiany. W związku z tym należy używać składni wzorca tylko w co najmniej jednym z tych warunków.
- Nie jesteś zależny od konkretnego formatu wyjściowego.
- Format nie jest potrzebny do przestrzegania standardu specyficznego dla kultury.
- W szczególności zamierzasz, aby wzorzec był niezmienny w różnych kulturach.
- Zamierzasz zlokalizować rzeczywisty ciąg wzorca formatu.
Poniżej przedstawiono podsumowanie różnic między szablonami formatów a wzorcami formatowania.
szablony Format, takie jak "dzień miesiąca"
- Abstrakcyjna reprezentacja formatu DateTime , który zawiera wartości miesiąca, dnia itp., w dowolnej kolejności.
- Gwarantowane zwracanie prawidłowego standardowego formatu we wszystkich wartościach regionów języka obsługiwanych przez system Windows.
- Gwarantuje odpowiednio kulturowo sformatowany ciąg dla danego regionu językowego.
- Nie wszystkie kombinacje składników są prawidłowe. Na przykład wartość "dayofweek day" jest nieprawidłowa.
Wzorce formatowania, takie jak "{month.full} {day.integer}"
- Jawnie uporządkowany ciąg, który wyraża pełną nazwę miesiąca, po którym następuje spacja, a następnie liczba całkowita dnia w tej kolejności lub dowolny określony wzorzec formatu.
- Może nie odpowiadać prawidłowemu formatowi standardowemu dla żadnej pary języków-regionów.
- Nie ma gwarancji, że jest to właściwe kulturowo.
- Można określić dowolną kombinację składników w dowolnej kolejności.
Przykłady
Załóżmy, że chcesz wyświetlić bieżący miesiąc i dzień wraz z bieżącym czasem w określonym formacie. Na przykład chcesz, aby użytkownicy języka angielskiego w Stanach Zjednoczonych widzieli coś podobnego do następującego:
June 25 | 1:38 PM
Część daty odpowiada szablonowi formatu "dzień miesiąca", a część godziny odpowiada szablonowi formatu "godzina minuty". W związku z tym można tworzyć formatery dla odpowiednich szablonów formatu daty i godziny, a następnie łączyć ich wyniki przy użyciu zlokalizowanego ciągu formatu.
var dateToFormat = System.DateTime.Now;
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
var dateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("month day");
var timeFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("hour minute");
var date = dateFormatter.Format(dateToFormat);
var time = timeFormatter.Format(dateToFormat);
string output = string.Format(resourceLoader.GetString("CustomDateTimeFormatString"), date, time);
CustomDateTimeFormatString jest identyfikatorem zasobu odwołującym się do zasobu lokalizowalnego w pliku zasobów (resw). W przypadku domyślnego języka angielskiego (Stany Zjednoczone) zostanie ona ustawiona na wartość "{0} | {1}" wraz z komentarzem wskazującym, że "{0}" jest datą i "{1}" jest godziną. W ten sposób tłumacze mogą dostosować elementy formatu zgodnie z potrzebami. Na przykład mogą zmienić kolejność elementów, jeśli wydaje się bardziej naturalne w jakimś języku lub regionie, aby godzina poprzedzała datę. Mogą też zastąpić znak "|" innym znakiem separatora.
Innym sposobem zaimplementowania tego przykładu jest wykonywanie zapytań o dwa formatery dla ich wzorców formatowania, łączenie tych razem, a następnie konstruowanie trzeciego formatatora ze wzorca formatu wynikowego.
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
var dateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("month day");
var timeFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("hour minute");
string dateFormatterPattern = dateFormatter.Patterns[0];
string timeFormatterPattern = timeFormatter.Patterns[0];
string pattern = string.Format(resourceLoader.GetString("CustomDateTimeFormatString"), dateFormatterPattern, timeFormatterPattern);
var patternFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter(pattern);
string output = patternFormatter.Format(System.DateTime.Now);
Ważne interfejsy API
Tematy pokrewne
Windows developer