Pregunta

Ok, un poco bocado.Entonces el problema que tengo es este: necesito almacenar una fecha de vencimiento donde solo la parte de la fecha es obligatoria y no quiero ninguna conversión de zona horaria.Entonces, por ejemplo, si tengo un vencimiento establecido en "08 de marzo de 2008", quiero que ese valor se devuelva a cualquier cliente, sin importar cuál sea su zona horaria.El problema con la remota como una fecha y hora es que se almacena/envía como "08 de marzo de 2008 00:00", lo que significa que para los clientes se conectan desde cualquier zona horaria al oeste de mí, se convierte y, por lo tanto, se voltea al "07 de marzo de 2008" cualquier sugerencia ¿Para manejar limpiamente este escenario?Obviamente enviarlo como una cadena funcionaría.algo más ?Gracias Ian

¿Fue útil?

Solución

Puede crear una estructura Fecha que proporcione acceso a los detalles que desea/necesita, como:

public struct Date
{
    public int Month; //or string instead of int
    public int Day;
    public int Year;
}

Es liviano, flexible y le brinda control total.

Otros consejos

No estoy seguro de a qué tecnología remota te refieres, pero este es un problema real con WCF, que actualmente solo admite la serialización de DateTime como xs:DateTime, inapropiado para un valor de solo fecha en el que no estás interesado en las zonas horarias.

.NET 3.5 introduce el nuevo tipo DateTimeOffset, que es bueno para transferir un DateTime entre zonas horarias, pero no ayuda con el escenario de solo fecha.

Idealmente, WCF necesita admitir opcionalmente xs:Date para serializar fechas como se solicita aquí:

http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=349215

Yo lo hago así:Siempre que tengo una fecha en la memoria o almacenada en un archivo, siempre está en DateTime en UTC.Cuando le muestro la fecha al usuario, siempre es una cadena.Cuando convierto entre la cadena y DateTime también hago la conversión de zona horaria.

De esta manera nunca tengo que lidiar con zonas horarias en mi lógica, solo en la presentación.

Puedes enviarlo como hora UTC

fechaHora1.ToUniversalTime()

Creo que enviar como una cadena de marca de tiempo sería la forma más rápida y sencilla, aunque podría intentar forzar una configuración regional para detener la conversión de hora.

La forma más sencilla que he manejado esto en aplicaciones en el pasado es simplemente almacenar la fecha como una cadena en formato aaaa-mm-dd.No es ambiguo y no se traduce automáticamente por nada.

Sí, es un dolor...

¿Por qué no lo envía como una cadena y luego lo convierte nuevamente a un tipo de fecha según sea necesario?De esta manera no se convertirá en diferentes zonas horarias.Mantenlo simple.

Editar:Me gusta la idea de Struct, permite una buena funcionalidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top