2010-02-02 7 views
5

Esiste un modo per utilizzare il metodo DateTime.ToString() per visualizzare il meridiem della porzione del tempo come "A.M." invece di "AM"? Ho provato ad usare la maschera "t.t." ma questo mostra solo "A.A."DateTime.ToString() visualizza meridiem come "A.M." o "P.M."

+3

Credo che questo è un esempio quasi perfetto di quando di modificare le specifiche per adeguarsi alle capacità delle la piattaforma piuttosto che aggirare l'implementazione della piattaforma per adattarla a una specifica. – tvanfosson

risposta

14

è possibile ridefinire i AMDesignator e PMDesignator proprietà di CultureInfo.DateTimeFormat, e quindi specificare la cultura come un provider di formato:

using System; 
using System.Globalization; 

class Program { 
    public static void Main() { 
     CultureInfo c = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
     c.DateTimeFormat.AMDesignator = "A.M."; 
     c.DateTimeFormat.PMDesignator = "P.M."; 
     Console.WriteLine(DateTime.Now.ToString("tt",c)); 
    } 
} 
+0

Bella soluzione generale. Questo si presta meglio all'internazionalizzazione. – ladenedge

+0

Mi rendo conto che questo è un po 'morto, ma questo problema è saltato fuori di nuovo per me l'altro giorno e mi piace molto questa soluzione. Ho appena fatto una breve domanda, se dovessi cambiare i designatori AM e PM per la cultura corrente (invece di creare una copia e usare la copia) cambierebbe questa impostazione per tutte le richieste fino a quando il mio server non verrà riavviato o solo per il richiesta corrente? – Kyle

+0

@Kyle, non posso testarlo adesso, ma penso che non puoi cambiare quelle proprietà per la cultura attuale senza clonare ... provalo e fammi sapere :) –

12

Uso "t.\\M":

DateTime time = DateTime.Now; 
string s = time.ToString("yyyy.MM.dd hh:mm:ss t.\\M."); 
Console.WriteLine(s); 

uscita:

2010.02.02 09:26:14 A.M. 

Spiegazione: t dà il primo carattere della AM/PM designatore (il designatore localizzato possono essere recuperate in DateTimeFormatInfo.AMDesignator e DateTimeFormatInfo.PMDesignator). Lo \\M scappa lo M in modo che non lo interpreti come parte della stringa di formato e stampi il valore numerico del mese.

Nota che, una volta fatto, sei esplicitamente insensibile alla cultura. Ad esempio, in Giappone, il designatore AM/PM differisce nel secondo carattere, non nel primo.

Problemi correlati