Имея дело только с датами в разных часовых поясах .Net - PullRequest
2 голосов
/ 17 сентября 2008

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

Ответы [ 7 ]

1 голос
/ 17 сентября 2008

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

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

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

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

1 голос
/ 17 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

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

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

0 голосов
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

dateTime1.ToUniversalTime ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...