27.11.2010, 19:41 | #1 |
Участник
|
Зачем нужно поле для хранения временной зоны для значений полей типа UtcDateTime?
Те, кто ковырялся в конвертации базы под 2009-ю, могли заметить, что там кроме полей createdDateTime/modifiedDateTime для каждого поля типа UtcDateTime, где значения хранятся по Гринвичу, есть также некое служебное поле, где хранится, условно говоря, идентификатор временной зоны, в которой было введено исходное значение (название этого поля можно узнать, вызвав DictTable.dateTimeTimeZoneRuleFieldName() для поля типа UtcDateTime). Оно в принципе и понятно: глобализация глобализацией, но проводки надо иметь возможность однозначно отнести к тому или иному дню и, соответственно, периоду. Однако, где именно это поле используется в системе? Кроме скриптов конвертации базы и "инструмента исправления часового пояса", ссылок на него я нигде не нашел.
|
|
27.11.2010, 20:32 | #2 |
Administrator
|
Очевидно - что это поле используется при изменении часового пояса в настройках пользователя. То, что это не вынесено в открытый код, а спрятано в ядре - еще не означает - что это нигде не используется. Но если "запомнить" например дату(время) изменения какой-нибудь записи, затем пойти к себе в настройки и изменить часовой пояс - то повторное обращение к дате изменения - покажет сдвиг на то кол-во часов, на которое отличается новый часовой пояс от старого.
Мне кажется - что одного этого использования уже достаточно.
__________________
Возможно сделать все. Вопрос времени |
|
28.11.2010, 00:47 | #3 |
Участник
|
Цитата:
Сообщение от sukhanchik
если "запомнить" например дату(время) изменения какой-нибудь записи, затем пойти к себе в настройки и изменить часовой пояс - то повторное обращение к дате изменения - покажет сдвиг на то кол-во часов, на которое отличается новый часовой пояс от старого. Мне кажется - что одного этого использования уже достаточно.
PS. Как раз для даты/времени создания/изменения записей Аксапта настройку часового пояса и не сохраняет. |
|
28.11.2010, 10:55 | #4 |
Administrator
|
Цитата:
Сообщение от gl00mie
Дата/время изменения какой-нить записи - это дата/время по Гринвичу, смещенная на нужное число минут в соответствии с настроенным для пользователя часовым поясом. К примеру, винды хранят для файлов т.н. системное время - по Гринвичу, а для пользователя показывают т.н. файловое время (если пользоваться терминологией функций Win32 API). Если пользователь пойдет и поменяет настройку своего часового пояса, то в следующий раз он в виде т.н. файлового времени увидит системное, "сдвинутое" в соответствии с новыми настройками.
Цитата:
Сообщение от gl00mie
Тут важны лишь значения системного времени, зафиксированного для какого-то события, и текущей настройки часового пояса, в соответствии с которой надо "сдвинуть" зафиксированное значение при отображении. Зачем в этой ситуации сохранять настройку часового пояса, в котором было зафиксировано исходное событие?
Другой человек, находясь в Уфе (мск+2 часа) (точнее у него в настройках часового пояса стоит Уфа) видит - что я изменил запись в 16:34. Это достигается тем, что к времени, которое хранится в БД по Гринвичу прибавляется часовой пояс пользователя. И теперь вопрос - зачем хранить информацию, что запись была сделана пользователем с часовым поясом Москва? Ответ (исключительно мое мнение без какого либо документального подтверждения). Если строить запросы к БД "снаружи" (Reporting Services, OLAP) - то без информации о часовом поясе нельзя будет четко понять - а сколько же было времени (там же нет текущего пользователя АХ). Тот же бизнес-коннектор (если использовать его) - заходит всегда в АХ под одним и тем же пользователем. А на портал, который заходит в АХ через бизнес-коннектор заходить могут люди из разных часовых поясов. Пример. Я (Москва) изменил запись в 14:34. Уфимец - в 16:38. Сохранится время - 11:34 и 11:38. При построении отчета в Reporting Services - отчет будет собираться на сервере (который находится например, в Ташкенте +4 часа). А на отчет будут смотреть несколько пользователей из разных часовых поясов и все увидят ташкентское время (или время по Гринвичу, неприведенное к их поясу), что неправильно. Кстати - надо будет посмотреть как это все будет работать. Ну вот это видимо сделано так, потому что наверное не предполагается делать запросы по этим полям извне.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 28.11.2010 в 11:02. |
|
28.11.2010, 19:58 | #5 |
Участник
|
Цитата:
Цитата:
Цитата:
Сообщение от sukhanchik
Пример. Я (Москва) изменил запись в 14:34. Уфимец - в 16:38. Сохранится время - 11:34 и 11:38. При построении отчета в Reporting Services - отчет будет собираться на сервере (который находится например, в Ташкенте +4 часа). А на отчет будут смотреть несколько пользователей из разных часовых поясов и все увидят ташкентское время (или время по Гринвичу, неприведенное к их поясу), что неправильно.
Цитата:
Во всяком случае, меня на такие мысли наталкивает то, что соответствующие системные поля в стандартном приложении "интересны" лишь буквально паре классов соответствующей направленности. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
Теги |
ax2009, utcdatetime, временная зона |
|
|