2012-02-10 29 views
5

Siento que esto es algo que he hecho miles de veces, por lo que no estoy seguro de por qué es tan difícil ahora. Creé un método que simplemente devuelve la fecha de hoy para el usuario en función de su desplazamiento UTC. Pero en lugar de devolver una cadena similar a una fecha, devuelve esta basuraC# DateTime to String Issue

"䙭/䙭/Ἰ뻱䙭" 

Aquí está el código.

public string getToday(Context context) 
{ 
    var settings = PreferenceManager.GetDefaultSharedPreferences(context); 
    var offset = settings.GetInt("offset", -5); 
    var now = DateTime.UtcNow.AddHours(offset); 

    return now.ToShortDateString(); 
} 

Cuando paso al código utilizando un punto de corte, desplazamiento y ahora ambos parecen correctos. ahora contiene partes de fecha válidas que parecen ser precisas. Algo sobre convertir ahora en una cadena parece ir terriblemente mal. También intenté:

return now.ToString("MM/dd/yyyy"); 

Mismo resultado. La parte extraña es el siguiente código funciona en otra actividad sin problema

var offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours; 
var now = DateTime.UtcNow.AddHours(offset); 
now.ToString("MM-dd-yyyy") 
+4

lo que la cultura es el código ejecutando bajo? – Oded

+0

@Oded ¡Yo diría que no inglés! – Zenexer

+0

@Zenexer - Yo diría que eso es un hecho. Mi comentario fue más un puntero al OP. – Oded

Respuesta

1

Supongo que su dispositivo está configurado en una cultura china/japonesa/coreana. Si siempre desea volver fechas de Estados Unidos, el uso:

return now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture); 

Editar: Teniendo en cuenta el resto de sus comentarios, estoy empezando a sospechar que esto podría ser causados ​​por la corrupción, o por un error en la implementación de MonoDroid. Se podría tratar de trabajar alrededor de ella mediante la construcción de la fecha manualmente (aunque esto es cierto no aborda la causa de su emisión):

return string.Format("{0:00}/{1:00}/{2:0000}", now.Month, now.Day, now.Year); 
+0

Dijo que otras aplicaciones funcionaban, por lo que suena específica de la aplicación, no específica de la máquina, para mí. En este caso, debe investigar para ver dónde está incorrectamente establecida la cultura dentro de su aplicación, en lugar de corregirla caso por caso. – Zenexer

+0

Esto no solucionó el problema. Nunca antes había tenido este problema y nunca tuve que preocuparme por la globalización. El código que devuelve un DateTime válido se encuentra dentro del mismo proyecto. – jmease

+0

¿Está seguro de que el método devuelve la basura y el código que llama a su método no la está convirtiendo (por ejemplo, al guardar en el archivo)? Parece que su primer símbolo, '䙭', significa "levantar o levantar (el vestido, falda, etc.)"; apenas relacionado con fechas/horas. – Douglas

3

Me parece un problema de localización. Asegúrate de estar en inglés, ya sea en EE. UU. O similar.