Лучшие практики для сериализации DateTime в.NET 3.5

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

21
задан abatishchev 28 January 2013 в 05:16
поделиться

5 ответов

Я думаю лучший способ сделать, это должно всегда передавать объект как UTC и преобразовывать в местное время на клиентах. Путем выполнения так, существует точка общей ссылки для всех клиентов.

Для преобразования в UTC назовите ToUniversalTime на объекте DateTime. Затем на клиентах назовите ToLocalTime для получения его в их зоне текущего времени.

18
ответ дан 29 November 2019 в 20:51
поделиться

Одна большая проблема - то, что сериализация WCF не поддерживает xs:Date. Это - большая проблема, как будто все, что Вы хотите, является датой, Вы не должны быть вынуждены быть обеспокоенными часовыми поясами. Следующая проблема подключения обсуждает некоторые проблемы: http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=349215

, Если Вы хотите представить момент времени однозначно, т.е. не только часть даты, можно использовать класс DateTimeOffset, если у Вас есть.NET 3.5 на обоих клиентах и серверах. Или для совместимости, всегда передавайте дату/временные стоимости как UTC.

12
ответ дан 29 November 2019 в 20:51
поделиться

UTC/GMT был бы последователен в распределенной среде.

Одна важная вещь, это определяет datetimeKind после заполнения Вашего свойства DateTime со значением от базы данных.

dateTimeValueUtcKind = DateTime.SpecifyKind(dateTimeValue, DateTimeKind.Utc);

Посмотрите MSDN

4
ответ дан 29 November 2019 в 20:51
поделиться

Пока Ваш слой веб-сервисов и клиентский слой используют.NET тип DateTime, это должно сериализировать и десериализовать правильно как стандартная SOAP локальная дата/время w/информация о Часовом поясе, такая как:

2008-09-15T13:14:36.9502109-05:00

, Если Вы абсолютно, положительно должен знать сам часовой пояс (т.е. вышеупомянутое могло бы быть Восточное стандартное время или Центральное летнее время), необходимо создать собственный тип данных, который представляет те части как таковые:

[Serializable]
public sealed class MyDateTime
{
    public MyDateTime()
    {
        this.Now = DateTime.Now;
        this.IsDaylightSavingTime = this.Now.IsDaylightSavingTime();
        this.TimeZone = this.IsDaylightSavingTime
            ? System.TimeZone.CurrentTimeZone.DaylightName
            : System.TimeZone.CurrentTimeZone.StandardName;
    }

    public DateTime Now
    {
        get;

        set;
    }

    public string TimeZone
    {
        get;

        set;
    }

    public bool IsDaylightSavingTime
    {
        get;

        set;
    }
}

тогда Ваш ответ был бы похож:

<Now>2008-09-15T13:34:08.0039447-05:00</Now>
<TimeZone>Central Daylight Time</TimeZone>
<IsDaylightSavingTime>true</IsDaylightSavingTime>
2
ответ дан 29 November 2019 в 20:51
поделиться

Мне везло только с хранением Типа данных datetime и всегда хранением его как GMT В каждом слое, я скорректирую значение GMT к локальному значению для слоя.

1
ответ дан 29 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: