2012-09-26 20 views
5

He intentado varios enfoques, este es uno de ellos:¿Cómo dar formato a DateTime a los usuarios locales entorno local en el formato de hora corta usando MonoTouch

System.Globalization.DateTimeFormatInfo format = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;  
return dt.Value.ToString (format.ShortTimePattern); 

El problema con ésta es que .NET 3.5 devuelve un " " como separador de tiempo que es más probable un error (desde mi localidad noruega utiliza un colon): .NET (3.5) formats times using dots instead of colons as TimeSeparator for it-IT culture?

También busqué aquí: Retrieving current local time on iPhone?

Pero TA no parecen tener setTimeStyle en el NSDateFormatter?

Entonces, ¿alguien tiene algún truco de magia en la manga?

Mi objetivo es la producción:

21:00/9:00 PM

10:09/10:09 AM

como la barra de estado en el iPhone.

Respuesta

6

Prueba esto:

var formatter = new NSDateFormatter(); 
formatter.TimeStyle = NSDateFormatterStyle.Short; 
Console.WriteLine (formatter.ToString (DateTime.Now)); 

Dicho esto, el error con el punto/de colon como separador de hora para locales de Noruega se ha corregido en Mono 2,12, así que cuando MonoTouch interruptores de usar Mono 2,12 en lugar de Mono 2,10 (ojala a principios del próximo año) también podrá usar esta alternativa administrada:

Console.WriteLine (DateTime.Now.ToString (new CultureInfo ("nb-NO").DateTimeFormat.ShortTimePattern)); 
+0

Funciona muy bien! Sigo olvidando que muchos de los métodos obj-c son propiedades en MT :-) –

1

Hice una pequeña investigación sobre fuentes mono y encontré que ShortTimePattern y TimeSeperator son not relate on each other (por favor, el Mono-gurú me corrige si estoy equivocado).

Por lo tanto, traté de hacer una solución solo iOS (no multiplataforma). Es decir es:

using MonoTouch.Foundation; 
    ... 
    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     var d = DateTime.Now; 
     Console.WriteLine("NSDate: " + GetCorrectTime(d)); 
    } 
    ... 
     // iOS-only (not cross-platform) 
    public string GetCorrectTime (DateTime d) 
    { 
     var nsdate = DateTimeToNSDate(d); 
     var nsdateformatter = new .NSDateFormatter(); 
     nsdateformatter.DateStyle = NSDateFormatterStyle.None; 
     nsdateformatter.TimeStyle = NSDateFormatterStyle.Short; 
     return nsdateformatter.ToString(nsdate); 
    } 
    ... 
     // DateTime to NSDate was taken from [that post][2] 
    public static NSDate DateTimeToNSDate(DateTime date) 
    { 
     return NSDate.FromTimeIntervalSinceReferenceDate((date-(new DateTime(2001,1,1,0,0,0))).TotalSeconds); 
    } 

Salida:

NSDate: 17:40 

por favor que me había prueba con el simulador y (Nynorsk (Noruega)) locale "nn-no".

Cuestiones relacionadas