Total Days In View Column

wowa

Well-known member
01.02.2007
848
0
#1
Здравствуйте...
Есть такая проблема.
Есть два поля, вот пример что в них хранится:
dtRefunded = 05/22/2009 12:00:00 AM GDT
Date = 05/14/2009

Все поля тип - Date/Time
Есть колонка во вью, с такой формулой:
Код:
@Integer((dtRefunded-Date)/86400)
Дак вот, для данного примера, результат = 7, хотя должно быть 8...
Видел пример, сейчас я его найти не могу, где оно правильно считается...
Насколько я понимаю, все это зависит от локальных настроек, из-за часовых поясов, так как меняются часы в поле. Или я не прав?
Кстати, если нажать правой кнопкой на документ и посмотреть поле, то показывается:
dtRefunded = 05/22/2009 12:00:00 AM GDT
а если глянуть с помощью ScanEZ, то 01:00:00 AM GDT.

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

wowa

Well-known member
01.02.2007
848
0
#2
может подтолкнете на идею......

dtRefunded - редактируемое поле, нигде кодом не заполняется... почему в некоторых случаях со временем, а в некоторых нет?

dtRefunded = 05/22/2009 12:00:00 AM GDT
dtRefunded = 10/11/2009
 
N

nnikishi

#3
вероятнее всего значение поля с часовым поясом модифицируется через back-end лотусскриптом
второй вариант заполняется через UI пользователем

чтобы отсекать в первом варианте с лотусскриптом время и часовой пояс, мспользуйте NotesDateTime класс и в нем метод SetAnyTime - он обрежет время и часовой пояс
 
A

amigolinx

#4
Может, как вариант чисто, обрезать в формуле dtRefunded и приводить к виду "только дата":
Код:
dtRefundedText := @Word( @Text( dtRefunded ); " "; 1);
dtRefunded := @TextToTime( dtRefundedText );
... ну и с Date аналогичным образом поступить - во избежание и в назидание так сказать ...
 
A

amigolinx

#6
ну да, такой вот звращенец ;) с заскриптованой квадратной бошкой ;)
 
N

nnikishi

#7
рекомендую все таки обязательно обрезать время и часовой пояс как я написал выше и хранить в поле только дату. Иначе могут быть очень неприятные результаты если база используется в разных часовых поясах - дата может быть смещена на день

@date корректно отработает (с точки зрения сервера), только если база на одном сервере и нет локальных реплик, иначе даты тоже могут плясать из-за часовых поясов
 

wowa

Well-known member
01.02.2007
848
0
#8
вероятнее всего значение поля с часовым поясом модифицируется через back-end лотусскриптом
второй вариант заполняется через UI пользователем

чтобы отсекать в первом варианте с лотусскриптом время и часовой пояс, мспользуйте NotesDateTime класс и в нем метод SetAnyTime - он обрежет время и часовой пояс
nnikishi , да, скорее всего вы правы что касается этих двух пунктов. Буду пробовать....


Может, как вариант чисто, обрезать в формуле dtRefunded и приводить к виду "только дата":
dtRefundedText := @Word( @Text( dtRefunded ); " "; 1);
dtRefunded := @TextToTime( dtRefundedText );

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

@date корректно отработает (с точки зрения сервера), только если база на одном сервере и нет локальных реплик, иначе даты тоже могут плясать из-за часовых поясов
Если я открою док, допустим в России, я увижу дату 15.11.2010... А где-н в Америки 14.11.2010....
 

wowa

Well-known member
01.02.2007
848
0
#9
Еще вопрос, работает один и тот же агент на сервере, почему в некоторых случаях

27.11.2010 00:00:00 GMT

а в некоторых

27.11.2010 00:00:00 GDT

Как это может такое происходить?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#11
прежде всего - нужно разобраться самому, что хотелось бы получить...?
оценить результат с т.з. процесса:
-где заносятся даты
-где происходит анализ
-что является критерием правильности разницы
 

wowa

Well-known member
01.02.2007
848
0
#12
-где заносятся даты
-где происходит анализ
-что является критерием правильности разницы
Наверно потиху я прихожу к истине.
Дело в том, что все документы хранятся в одной базе...там с датами вроде как все ок, но надо еще проверить

И есть вторая база, Репортер...
Там есть кнопка синхронизации
Код:
@Command([ToolsRunMacro];"aSynchronizer")
Запускается агент, который переносит нужные поля, в том числе эти даты...

Код:
Call docReport.ReplaceItemValue(varItems(intUpd), docSource.GetItemValue(varItems(intUpd)))
Может есть какой-то более правильный способ для дат?

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#13
не могу с уверенностью сказать, но даты хранят тот часовой пояс где с ними происходят манипуляции
т.к. поле менялось - я полагаю, часовой пояс будет текущий (где выполнен агент) и дата пересчитается в него
но если мы считаем рабочие часы - пересчет часов на локальную зону не нужен
 
N

nnikishi

#14
Да, в вашем случае агент запускается в локальном контексте пользователя, который нажал на кнопку и его часовой пояс становится критичным

воткните что то вроде такого костылька:


Dim ndt as NotesDateTime

if IsDate(docSource.GetItemvalue(varItems(intUpd))) Then 'проверяем является ли значение поля датой

Set ndt = New NotesDateTime(docSource.GetItemvalue(varItems(intUpd)))
Call ndt.SetAnyTime 'обрезаем время

Call docReport.ReplaceItemValue(varItems(intUpd), ndt)

Else
Call docReport.ReplaceItemValue(varItems(intUpd), docSource.GetItemvalue(varItems(intUpd)))
End if
 

wowa

Well-known member
01.02.2007
848
0
#15
nnikishi , сделал как вы говорили... на первый взгляд , некоторые тоталы изменились в правильный вид. Тестирование продолжаю....
Но время вроде как бы не исчезло, а просто привели в общему часовому поясу (типа того)

dtRefunded = 05/22/2009 12:00:00 AM ZE2
dtRefunded = 10/11/2009 12:00:00 AM ZE2

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




Добавлено:
но я думаю что в более позднем часовом поясе увидят другую дату.
да, так и получилось... изменил на компе часовой пояс и дата изменилась,

была

dtRefunded = 05/22/2009 12:00:00 AM ZE2

стала

dtRefunded = 05/21/2009 11:00:00 PM ZE2