2016-01-25 4 views
1

Как получить функцию даты, чтобы вернуть дату в соответствии с текущей системной датой? Прямо сейчас, с фрагментом кода ниже, он всегда возвращает время в Великобритании, а не текущую системную дату.Функция FormCalc Date не возвращает текущую системную дату

<calculate> 
<script>$ = concat(num2date(date(), DateFmt()), " ", num2Time(Time(), TimeFmt()))</script> 

Любая помощь приветствуется!

ответ

0

Это, вероятно, не время Великобритании, а GMT (или UTC, чтобы использовать более точный термин). Великобритания, как правило, ориентируется на GMT зимой, но летом она продвигается на один час до BST для летнего времени.

Теперь я никогда не использовал LiveCycle самостоятельно, но тем не менее, я прочитал несколько минимальных документов для LiveCycle FormCalc Date and Time Functions и the spec, и мне кажется, что было сделано несколько критических ошибок.

Функции date32 и 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.

+0

благодарит за ваш анализ! Вы правы, у меня нет другого выбора, кроме как использовать Javascript. –

Смежные вопросы