Это, вероятно, не время Великобритании, а GMT (или UTC, чтобы использовать более точный термин). Великобритания, как правило, ориентируется на GMT зимой, но летом она продвигается на один час до BST для летнего времени.
Теперь я никогда не использовал LiveCycle самостоятельно, но тем не менее, я прочитал несколько минимальных документов для LiveCycle FormCalc Date and Time Functions и the spec, и мне кажется, что было сделано несколько критических ошибок.
Функции date
32 и time
возвращают значения, основанные на UTC, но только связанные с временем функции были проинформированы о локальном часовом поясе. То есть существуют отдельные функции Num2Time
и Num2GMTime
, но есть только одна функция Num2Date
.
Num2Date
функция работает в терминах целых целых дней, и, таким образом, они просто дней с 1900-01-01
. Поэтому число, переданное функции, должно быть уже быть представителем желаемого часового пояса. Однако функция Date
получает только текущую дату GMT. Кажется, что нет функции для получения текущего местных.
По-разному, из-за задействованной миллисекундной точности. Однако здесь есть еще один недостаток. Несмотря на документы, говорящие о том, что функция Time
возвращает «количество миллисекунд с эпохи», ее фактически возвращает только число миллисекунд с полночь GMT. Не существует дневного накопления миллисекунд из даты. docs here даже лежат в их образце кода, который гласит:
Возвращает текущее системное время как число миллисекунд с эпохи.
Время() => 71533235 в точности 3:52:15 P.M. 15 сентября 2003 г. пользователю в зоне Восточного стандартного времени (EST).
Если это действительно так (и обеспечение, чтобы использовать их 1900-01-01 эпоху), то значение будет фактически включать в себя дополнительные 3272572800000 миллисекунд, представляющих дни между 1900-01-01
и 2003-09-15
, в результате чего общее метку времени, чтобы 3272644333235. Кроме того, там есть опечатка, потому что временная метка, которую они дают, составляет 3:52:13, а не 3:52:15. Очевидно, никто не обращал пристального внимания на эти документы!
Реальная проблема заключается в том, что никто не может быть уверен, что число миллисекунд с полуночи текущего дня в локальной временной зоне одинакова на каждый день. Если вместо того, чтобы получать текущее время, вы работали со значениями прошедшего времени хранения, вы можете отключиться на час (+ или -), если текущее смещение отличается из-за летнего времени.Пример: Восточное время может быть UTC-5 или UTC-4, но только действующее смещение будет использоваться функцией Num2Time
, даже если дата, с которой вы работаете, использует другое смещение.
Таким образом, функция Date
недостаточна, что приводит к вашим наблюдениям, а функциональность даты и времени в целом плохо разработана. Учитывая ограничения этого API, я даже не могу рекомендовать обходной путь. Должна быть функция LocalDate
, которая будет использоваться вместо функции Date
, но ее не существует.
Единственный совет, который я могу предложить, состоит в том, что он появляется (из моих исследований, а не опыта), что LiveCycle может использовать либо FormCalc, либо JavaScript. Итак, используйте JavaScript.
благодарит за ваш анализ! Вы правы, у меня нет другого выбора, кроме как использовать Javascript. –