Работа с датами только по дате в часовых поясах в .Net

StackOverflow https://stackoverflow.com/questions/79774

  •  09-06-2019
  •  | 
  •  

Вопрос

Хорошо, немного глотка.Итак, проблема у меня в следующем: мне нужно сохранить дату истечения срока действия, где только требуется часть даты, и мне не нужно преобразование часового пояса.Так, например, если у меня установлен срок действия «08 марта 2008 г.», я хочу, чтобы это значение было возвращено любому клиенту - независимо от его часового пояса.Проблема с удалением его в качестве DateTime заключается в том, что он хранится/отправляется как «8 марта 2008 г. 00:00», что означает, что для клиентов, подключающихся из любого часового к западу от меня, и, следовательно, переворачивается в «07 марта 2008 г.» любые предложения Для чистого обработки этого сценария?Очевидно, что отправка его в виде строки будет работать.что-нибудь еще ?Спасибо, Ян

Это было полезно?

Решение

Вы можете создать структуру Date, которая обеспечивает доступ к нужным/нужным деталям, например:

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

Это легкий, гибкий и дает вам полный контроль.

Другие советы

Я не уверен, о какой технологии удаленного взаимодействия вы имеете в виду, но это реальная проблема с WCF, который в настоящее время поддерживает сериализацию DateTime только как xs:DateTime, что не подходит для значения только даты, когда вас не интересуют часовые пояса.

В .NET 3.5 представлен новый тип DateTimeOffset, который удобен для передачи DateTime между часовыми поясами, но не помогает в сценарии, использующем только дату.

В идеале WCF необходимо дополнительно поддерживать xs:Date для сериализации дат, как это требуется здесь:

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

Я делаю это так:Всякий раз, когда у меня есть дата в памяти или в файле, она всегда находится в формате DateTime в формате UTC.Когда я показываю дату пользователю, это всегда строка.Когда я конвертирую строку в DateTime, я также выполняю преобразование часового пояса.

Таким образом, мне никогда не придется иметь дело с часовыми поясами в моей логике, только в презентации.

Вы можете отправить его как время UTC.

dateTime1.ToUniversalTime()

Я думаю, что отправка в виде строки временной метки будет самым быстрым/простым способом, хотя вы можете посмотреть, как заставить локаль остановить преобразование времени.

Самый простой способ справиться с этим в приложениях в прошлом — просто сохранить дату в виде строки в формате гггг-мм-дд.Он однозначен и ничем автоматически не переводится.

Да, это боль...

Почему бы вам не отправить его в виде строки, а затем при необходимости преобразовать обратно в тип даты?Таким образом, он не будет конвертироваться в разные часовые пояса.Будь проще.

Редактировать:Мне нравится идея Struct, она обеспечивает хорошую функциональность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top