27.11.2013, 15:47 | #1 |
Участник
|
crm2011: одна и та же дата в полях базы, разное отображение на форме
Всем привет.
у contact-а в базе поля: birthdate = '1990-01-03 20:00:00.000', annivarsary = '2014-01-03 20:00:00.000' (расчитываем поле для рассылок-поздравляшек своей обновлялкой) на форме выводятся две разные даты ("только дата"). если перевести отображение в "дата и время" - у ДР - 3 янв. 23:00 , у годовщины - 4 янв. 00:00 почему так и как побороть? изначально считаем 20:00 - "правильной" датой (+4 сейчас к ЮТЦ - пусть будет дефолтом) адд: timezone - москва (забыл сказать) 2010ый год - время на форме совпадает . 2011ый - уже начинает расходиться. это из-за отмены перехода на зимнее время? (не помню в каком году было) Последний раз редактировалось Eugene.Ostroukhov; 27.11.2013 в 16:34. |
|
27.11.2013, 16:48 | #2 |
Участник
|
для 1990 и 2014 года применяются разные правила перевода времени.
На правила надо смотреть в таблицах TimeZoneRule и TimeZoneDefinition. После чего думаю станет понятно. И еще если нет правила для какого-то года то применяется правило для 1900 года |
|
27.11.2013, 17:09 | #3 |
Участник
|
теоретически, я догадываюсь почему так.
в 1990м году в марте было зимнее время и это +3 от UTC. Сейчас - всегда +4 UTC СРМ пересчитывает время 1990го года - по тогдашним правилам (и получает 23:00) а в пересчете .NET-ом по "сейчашним правилам" выходит шляпа. кажется, я где-то такое видел.. |
|
27.11.2013, 19:42 | #4 |
Участник
|
для .net есть функции преобразование вот пример http://msdn.microsoft.com/en-us/library/hh547406.aspx и описалово http://msdn.microsoft.com/en-us/libr...merequest.aspx
|
|
27.11.2013, 19:57 | #5 |
Участник
|
Цитата:
Сообщение от spectr
для .net есть функции преобразование вот пример http://msdn.microsoft.com/en-us/library/hh547406.aspx и описалово http://msdn.microsoft.com/en-us/libr...merequest.aspx
хотя если это работает коорректно и единственный выход - придется им воспользоваться, конечно |
|
28.11.2013, 12:05 | #6 |
Участник
|
да, CRM конвертирует даты иначе, чем обычный DateTime.ToUniversalTIme()
последний почему-то не учитывает разные rules из TimeZoneInfo class. |
|
28.11.2013, 12:34 | #7 |
Участник
|
Потому что в СРМ свои часовые пояса и для них правила. Они хранятся в таблицах приведенных выше. И еще один из моментов, то что если в этих таблицах нет нужного правила то они юзают правило для 1900 года.
|
|
|
За это сообщение автора поблагодарили: Eugene.Ostroukhov (1). |
28.11.2013, 12:40 | #8 |
Участник
|
не, с СРМом как раз все ок.
дотнетный ToUniversalTime работает в текущей разнице с UTC поэтому, если я в СРМ сохраняю дату в виде UTC (не даю СРМу конвертировать её по СРМным правилам) - то СРМ сохраняет её в чистом виде. поэтому дата 3 января 1990го года конвертируется в 2 января 1990 20:00 (.net-ом), а СРМ пересчитывает его обратно в московский пояс как +3, т.к. тогда были переводы времени. и выходит, что на форме дата как раз и показывается как 2 января 1990 (23:00, если вывести еще и дату) Последний раз редактировалось Eugene.Ostroukhov; 28.11.2013 в 12:50. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Доступ из CRM2011 в CRM4.0 | 7 | |||
Отображение поля "Название подразделения" в форме | 6 | |||
Проблема с icon.aspx - всегда одна и та же иконка | 1 |
|