Domanda

Ok, un po' un boccone.Quindi il problema che ho è questo: devo memorizzare una data di scadenza dove soltanto la parte della data è obbligatoria e non desidero alcuna conversione del fuso orario.Quindi, ad esempio, se ho una scadenza impostata su "08 marzo 2008", desidero che quel valore venga restituito a qualsiasi client, indipendentemente dal fuso orario.Il problema con la ristrutturazione come DateTime è che viene memorizzato/inviato come "08 marzo 2008 00:00", il che significa che per i clienti che si collegano da qualsiasi fuso di tempo a ovest di me vengono convertiti e quindi capovolti in "07 marzo 2008" eventuali suggerimenti per gestire in modo pulito questo scenario?Ovviamente inviarlo come stringa funzionerebbe.qualunque altra cosa ?Grazie, Ian

È stato utile?

Soluzione

Potresti creare una struttura Date che fornisca l'accesso ai dettagli che desideri/necessiti, come:

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

Questo è leggero, flessibile e ti dà il pieno controllo.

Altri suggerimenti

Non sono sicuro a quale tecnologia remota ti riferisci, ma questo è un vero problema con WCF, che attualmente supporta solo la serializzazione di DateTime come xs:DateTime, inappropriato per un valore di sola data in cui non sei interessato ai fusi orari.

.NET 3.5 introduce il nuovo tipo DateTimeOffset, utile per trasferire un DateTime tra fusi orari, ma non è utile con lo scenario di sola data.

Idealmente WCF deve supportare facoltativamente xs:Date per la serializzazione delle date come richiesto qui:

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

Lo faccio in questo modo:Ogni volta che ho una data in memoria o archiviata in un file, è sempre in un DateTime in UTC.Quando mostro la data all'utente è sempre una stringa.Quando converto tra la stringa e DateTime, eseguo anche la conversione del fuso orario.

In questo modo non devo mai occuparmi dei fusi orari nella mia logica, ma solo nella presentazione.

Puoi inviarlo come ora UTC

dateTime1.ToUniversalTime()

Penso che l'invio come stringa di timestamp sarebbe il modo più rapido/semplice, anche se potresti cercare di forzare una locale per interrompere la conversione dell'ora.

Il modo più semplice in cui ho gestito questo problema sulle app in passato è stato semplicemente memorizzare la data come una stringa nel formato aaaa-mm-gg.Non è ambiguo e non viene tradotto automaticamente da nulla.

Sì, è un dolore...

Perché non lo invii come stringa e poi lo riconverti in un tipo di data secondo necessità?In questo modo non verrà convertito su fusi orari diversi.Mantienilo semplice.

Modificare:Mi piace l'idea di Struct, consente una buona funzionalità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top