Проблема с функцией LSParseDateTime на сервере, несмотря на то, что локаль сервера установлена ​​правильно - PullRequest
4 голосов
/ 16 января 2011

Когда я запускаю этот тестовый код на моей машине для разработки, он работает как положено.CF9.01

Я нахожусь в Европе, используя формат даты в евро, поэтому 10 сентября 1957 года - 10 сентября 1957 года.*

Тот же код, вывод на работающем сервере:

Initial string = "10/09/1957"
LSparsedatetime output = {ts '1957-10-09 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'}

Операционная система сервера - Windows Web Server 2008 R2.Я проверил Панель управления> установка даты и времени, и она правильно установлена ​​на Лондон.Веб-сервер - IIS7, но я не думаю, что это повлияет на что-либо?

В регионе и на языке, местоположение установлено на Соединенное Королевство, а в административном (изменить язык системы) это также правильно, как на английском (Великобритания)

Обновление: что касается CF, он считает, что сервер находится в США.

Запуск этого ...

<cfset testDate="10/09/1957">
<cfoutput>
Initial string = "#testDate#"<br>
#getLocale()#:<br>
LSparsedatetime output = #lsparsedatetime(testDate)#<br>
parsedatetime output = #parsedatetime(testDate)#<br>
<P>
<cfset SetLocale("en_GB") />
en_GB:<br>
LSparsedatetime output = #lsparsedatetime(testDate)#<br>
parsedatetime output = #parsedatetime(testDate)#<br>
</cfoutput>

Дает этот вывод

Initial string = "10/09/1957"
English (US):
LSparsedatetime output = {ts '1957-10-09 00:00:00'}
parsedatetime output = {ts '1957-10-09 00:00:00'}
en_GB:
LSparsedatetime output = {ts '1957-09-10 00:00:00'}
parsedatetime output = {ts '1957-10-09 00:00:00'}

Но вот подтверждение настроек сервера.

alt text alt text

Принудительное задание локали с помощью setLocale в коде приводит к правильному поведению.

Ответы [ 2 ]

4 голосов
/ 16 января 2011

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

<cfset testDate="10/09/1957">
<cfoutput>
Initial string = "#testDate#"<br>
#getLocale()#:<br>
LSparsedatetime output = #lsparsedatetime(testDate)#<br>
parsedatetime output = #parsedatetime(testDate)#<br>
<cfset SetLocale("en_US") />
en_US:<br>
LSparsedatetime output = #lsparsedatetime(testDate)#<br>
parsedatetime output = #parsedatetime(testDate)#<br>
<cfset SetLocale("en_GB") />
en_GB:<br>
LSparsedatetime output = #lsparsedatetime(testDate)#<br>
parsedatetime output = #parsedatetime(testDate)#<br>
</cfoutput>

Я в Украине, поэтому вывод выглядит следующим образом:

Initial string = "10/09/1957"
uk_UA:
LSparsedatetime output = {ts '1957-09-10 00:00:00'}
parsedatetime output = {ts '1957-10-09 00:00:00'}
en_US:
LSparsedatetime output = {ts '1957-10-09 00:00:00'}
parsedatetime output = {ts '1957-10-09 00:00:00'}
en_GB:
LSparsedatetime output = {ts '1957-09-10 00:00:00'}
parsedatetime output = {ts '1957-10-09 00:00:00'}

Очевидно, ParseDateTime работает одинаково с любой локалью, но LSParseDateTime выполняет необходимую работу.

1 голос
/ 16 января 2011

Я думаю, это связано с вашим языком , а не с вашим часовым поясом.

Ваш языковой стандарт на вашем действующем сервере, по-видимому, настроен на США, так как он 9 октября 1957 года видит 9 октября, тогда как ваш тестовый сервер видит его в британском стиле, т.е.

Вам необходимо сравнить локальные настройки на серверах.

Попробуйте «Регион и язык» -> «Административный» (вкладка) -> «Изменить языковой стандарт системы» и сравнить.

Надеюсь, это поможет!

...