Tengo una aplicación WP8, que enviará la hora actual a un servicio web.
Obtengo la cadena de fecha y hora llamando
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff")
Para la mayoría de los usuarios funciona muy bien y me da la cadena correcta como "09/10/2013 04:04:31.415"
. Pero para algunos usuarios, la cadena resultante es algo así "09/14/2013 07.20.31.371"
, lo que causa problemas en mi servicio web.
¿Es por algún problema de formato cultural? ¿Cómo puedo asegurarme de que la cadena de resultados esté delimitada por dos puntos en lugar de punto?
c#
windows-phone-8
Eldorado
fuente
fuente
Respuestas:
Si. Su usuario debe estar en una cultura donde el separador de tiempo es un punto. Tanto ":" como "/" se interpretan de manera sensible a la cultura en formatos de fecha y hora personalizados .
Sugeriría especificar
CultureInfo.InvariantCulture
:Alternativamente, puede citar los separadores de hora y fecha:
... pero eso le dará resultados "interesantes" que probablemente no espere si consigue que los usuarios se ejecuten en una cultura donde el sistema de calendario predeterminado no es el calendario gregoriano. Por ejemplo, tome el siguiente código:
Eso produce una producción (el 18 de septiembre de 2013) de:
¡Supongo que su servicio web se sorprendería de eso!
De hecho, sugeriría no solo usar la cultura invariante, sino también cambiar a un formato de fecha ISO-8601:
Este es un formato más aceptado a nivel mundial: también se puede ordenar y hace que el orden de mes y día sea obvio. (Mientras que el 07/06/2013 podría interpretarse como el 7 de junio o el 6 de julio, dependiendo de la cultura del lector).
fuente
useUserOverride
parámetro en falso, de lo contrario, algunas configuraciones de usuario pueden anular las configuraciones culturales. Por ejemplo, en su caso, sugiero usar newCultureInfo("ar-SA", false)
.:
tiene un significado especial: es el separador de tiempo. ( Cadenas de formato de fecha y hora personalizadas ).Use
\
para escapar de ella:O use
CultureInfo.InvariantCulture
:Sugeriría ir con el segundo, porque también
/
tiene un significado especial (es El separador de fecha ), por lo que también puede tener problemas con eso.fuente
Puede usar InvariantCulture porque su usuario debe estar en una cultura que use un punto en lugar de dos puntos:
fuente
Me encontré con este problema últimamente con Windows 10 desde otra dirección, y encontré la respuesta de @JonSkeet muy útil para resolver mi problema.
También investigué un poco más con un formulario de prueba y descubrí que cuando la cultura actual se estableció en
"no"
o"nb-NO"
en tiempo de ejecución (Thread.CurrentThread.CurrentCulture = new CultureInfo("no");
), la llamada ToString ("aaaa-MM-dd HH: mm: ss") respondió de manera diferente en Windows 7 y Windows 10. ¡Devolvió lo que esperaba en Windows 7 y HH.mm.ss en Windows 10!¡Creo que esto da un poco de miedo! Como creía que una cultura era una cultura en cualquier versión de Windows al menos.
fuente
Puedes usar String.Format:
fuente
Convertir fecha en cadena
Utilice el nombre de espacio
Código
fuente