Pergunta

Ok - um pouco complicado.Então o problema que tenho é este - preciso armazenar uma data de expiração onde apenas a parte da data é obrigatória e não quero nenhuma conversão de fuso horário.Por exemplo, se eu tiver uma expiração definida como "08 de março de 2008", quero que esse valor seja retornado a qualquer cliente - não importa qual seja o fuso horário.O problema de remoção como um tempo de dados é que ele é armazenado/enviado como "08 de março de 2008 00:00", o que significa que, para clientes que se conectam de qualquer fuso horário a oeste de mim, ele é convertido e, portanto, voltado para "07 de março de 2008" alguma sugestão Para lidar de maneira limpa deste cenário?Obviamente, enviá-lo como uma string funcionaria.algo mais ?Obrigado, Ian

Foi útil?

Solução

Você pode criar uma estrutura Date que forneça acesso aos detalhes que você deseja/precisa, como:

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

É leve, flexível e oferece controle total.

Outras dicas

Não tenho certeza de qual tecnologia de comunicação remota você está se referindo, mas esse é um problema real com o WCF, que atualmente só suporta a serialização de DateTime como xs:DateTime, inadequado para um valor somente de data em que você não está interessado em fusos horários.

O .NET 3.5 introduz o novo tipo DateTimeOffset, que é bom para transferir um DateTime entre fusos horários, mas não ajuda no cenário somente de data.

Idealmente, o WCF precisa, opcionalmente, oferecer suporte a xs:Date para serializar datas conforme solicitado aqui:

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

Eu faço assim:Sempre que tenho uma data na memória ou armazenada em um arquivo ela está sempre em um DateTime em UTC.Quando mostro a data para o usuário é sempre uma string.Quando converto entre a string e o DateTime também faço a conversão de fuso horário.

Dessa forma nunca terei que lidar com fusos horários na minha lógica, apenas na apresentação.

Você pode enviá-lo como horário UTC

dateTime1.ToUniversalTime()

Acho que enviar como uma string de carimbo de data/hora seria a maneira mais rápida/fácil, embora você possa forçar um código de idioma para impedir que a conversão de tempo ocorra.

A maneira mais fácil de lidar com isso em aplicativos no passado é apenas armazenar a data como uma string no formato aaaa-mm-dd.Não é ambíguo e não é traduzido automaticamente por nada.

Sim, é uma dor...

Por que você não o envia como uma string e depois o converte novamente para um tipo de data, conforme necessário?Dessa forma, não será convertido em fusos horários diferentes.Mantenha simples.

Editar:Gosto da ideia do Struct, permite uma boa funcionalidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top