Come usare i modelli per la formattazione di date e ore (HTML)
[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]
Utilizzando l'API Windows.Globalization.DateTimeFormatting insieme a modelli personalizzati, puoi visualizzare date e orari esattamente nel formato che desideri.
Windows.Globalization.DateTimeFormatting offre varie possibilità per formattare data e ora per lingue e paesi diversi del mondo. Nella maggior parte dei casi, puoi usare i formati standard per l'anno, il mese, il giorno e così via. In alternativa, puoi usare modelli di stringa standard, ad esempio "longdate" o "month day" per assicurare che il formato di DateTime risultante sia appropriato per la cultura, la lingua e l'area geografica dell'utente. In alcuni casi, però, può essere necessario un maggior controllo sull'ordine e il formato delle parti costituenti della stringa DateTime che desideri visualizzare. Il motivo può essere che il tuo target è costituito da una specifica cultura o area geografica nota oppure che vuoi visualizzare le parti costituenti in un formato non standard.
A questo scopo, puoi usare una sintassi speciale per il parametro del modello di stringa, chiamata "pattern". La sintassi pattern consente di ottenere le singoli parti costituenti di un oggetto DateTime,—ad esempio—solo il nome del mese o il valore dell'anno, per visualizzarli nel formato personalizzato scelto.
Cosa sapere
Tecnologie
Prerequisiti
- Globalizzazione e localizzazione
- Linee guida ed elenchi di controllo per la globalizzazione della tua app
- Guida introduttiva: Uso di formati adatti al mercato globale
È importante osservare che, quando si usano i modelli, si sta creando un formato personalizzato che potrebbe non essere valido per tutte le impostazioni di cultura. Prendi ad esempio in considerazione il modello "month day":
var datefmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("month day");
Questo modello crea un formattatore basato sul valore di lingua e area geografica del contesto corrente. Pertanto, visualizza sempre il mese e il giorno insieme al formato globale appropriato. Ad esempio, visualizza "January 1" per Inglese (Stati Uniti), ma "1 janvier" per Francese (Francia) e "1月1日" per Giapponese. Il motivo è che il modello è basato su una stringa pattern specifica delle impostazioni di cultura, a cui è possibile accedere tramite la proprietà pattern:
var monthdaypattern = datefmt.patterns;
In questo modo verranno prodotti risultati diversi a seconda della lingua e dell’area geografica del formattatore. Nota che i vari paesi possono usare parti costituenti diverse in ordini diversi, con o senza caratteri e spaziatura aggiuntivi:
En-US: "{month.full} {day.integer}"
Fr-FR: "{day.integer} {month.full}"
Ja-JP: "{month.integer}月{day.integer}日"
Puoi usare i pattern per costruire un oggetto DateTimeFormatter personalizzato, ad esempio quello seguente basato sul pattern relativo all'inglese US:
var datefmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("{month.full} {day.integer}");
Windows restituisce i valori specifici della cultura per i singoli componenti, racchiusi tra parentesi graffe {}. Ma con la sintassi pattern, l'ordine delle parti costituenti non cambia. Ottieni esattamente ciò che hai specificato e questo potrebbe non essere sempre appropriato alle impostazioni di cultura:
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)
Inoltre, non è garantito che i pattern rimangano coerenti nel tempo. I sistemi di calendario di paesi o aree geografiche possono cambiare, modificando il modello di formato. Windows aggiorna l'output dei formattatori per supportare queste modifiche. Devi pertanto usare la sintassi pattern per la formattazione di oggetti DateTime solo nei casi seguenti.
- Non dipendi da un determinato output per un formato.
- Non è necessario che il formato segua standard specifici delle impostazioni di cultura.
- Desideri chiaramente che il pattern rimanga uguale per le diverse impostazioni di cultura.
- Intendi localizzare il pattern.
Per riepilogare la differenze tra i modelli di stringa standard e i pattern di stringa non standard:
Modelli di stringa come "month day":
- Rappresentazione astratta di un formato DateTime che include in un ordine qualsiasi i valori di mese e giorno.
- Garantisce la restituzione di un formato standard valido per tutti i valori di lingua- area geografica supportati da Windows.
- Garantisce la restituzione di una stringa con formattazione adatta alle impostazioni di cultura specifiche per una data coppia lingua- area geografica.
- Non tutte le combinazioni delle parti costituenti sono valide. Non esiste ad esempio un modello di stringa per "dayofweek day".
Pattern di stringa come "{month.full} {day.integer}":
- Stringa ordinata in modo esplicito che esprime il nome completo del mese, seguito da uno spazio, quindi dal numero intero del giorno nell'ordine da essa indicato.
- Potrebbe non corrispondere a un formato standard valido per tutte le coppie lingua- area geografica.
- Non garantisce la conformità alle impostazioni di cultura specifiche.
- Consente di specificare qualsiasi combinazione delle parti costituenti e in qualsiasi ordine.
Istruzioni
Supponi di voler visualizzare il mese e il giorno correnti insieme all'ora corrente in un formato specifico. Ad esempio, desideri che gli utenti di lingua inglese statunitense vedano una stringa di questo tipo:
June 25 | 1:38 PM
La parte della data corrisponde al modello "month day", mentre la parte dell'ora corrisponde al modello "hour minute". Puoi quindi creare un formato personalizzato che concatena i pattern che costituiscono questi modelli.
Prima puoi recuperare i formattatori dei modelli date e time rilevanti, poi i pattern di tali modelli:
// Get formatters for the date part and the time part.
var dtf = Windows.Globalization.DateTimeFormatting;
var mydate = dtf.DateTimeFormatter("month day");
var mytime = dtf.DateTimeFormatter("hour minute");
// Get the patterns from these formatters.
var mydatepattern = mydate.patterns[0];
var mytimepattern = mytime.patterns[0];
Il tuo formato personalizzato deve essere archiviato come stringa di risorse localizzabile. La stringa per l'inglese (Stati Uniti) sarà ad esempio "{date} | {time}". I localizzatori possono modificare questa stringa secondo necessità. Possono ad esempio cambiare l'ordine delle parti costituenti, se sembra più adatto che l'ora preceda la data in alcune lingue o aree geografiche. Oppure possono sostituire "|" con un altro carattere separatore. In fase di esecuzione sostituirai le parti {date} e {time} della stringa con il pattern appropriato:
// Assemble the custom pattern. This string comes from a resource, and should be localizable.
var mydateplustime = WinJS.Resources.getString("date_plus_time");
mydateplustime = mydateplustime.replace("{date}", mydatepattern);
mydateplustime = mydateplustime.replace("{time}", mytimepattern);
Puoi quindi costruire un nuovo formattatore basato sul pattern personalizzato:
// Get the custom formatter.
var mydateplustimefmt = new dtf.DateTimeFormatter(mydateplustime);
Argomenti correlati
Esempio di formattazione di data e ora