Как установить базовое время для DateTime в IIS (ASP) для режима совместимости? - PullRequest
0 голосов
/ 02 октября 2009

Мы обновили наши серверы до Windows 2008 Server, но мы все еще используем SQL Server 2005 в нашем производственном программном обеспечении. Проблема возникает в одной части системы, где мы храним время как datetime. С тех пор при хранении времени в столбце datetime базовая дата сохранялась как дата. В SQL Server 2005 это 1900-01-01. Тогда IIS понимает, что это случай по умолчанию, поэтому наше приложение ASP печатало только часть времени datetime, и наша система работала как ожидалось.

С этим обновлением sa [i] d базовая дата и время, по-видимому, изменились на 1899-12-30, поэтому на наших страницах ASP отображается полное время, например, 1900-01-01 07:30:00 вместо только время (07:30:00), поскольку это больше не дата по умолчанию.

Я знаю, что это не лучший подход для системы, это был не я, кто разработал ее в первую очередь, я просто поддерживаю это, поэтому я хотел бы знать, есть ли место в IIS меню настроек или в Windows, где я могу установить базовую дату для своих приложений. Я где-то читал, что SQL Server 2005 использует 1900-01-01 в качестве основы, где другие приложения MS используют 1899-30-12, но я не думаю, что это так, я надеюсь, что смогу это изменить.

Я пока не знаю последствий извлечения времени и его использования в этой части системы (изменения нашего программного обеспечения) вместо того, чтобы возиться с конфигурациями (вход в наше программное обеспечение), но я полагаю, что слепые зоны будут во всем мире.

====== Пример, как спросили:

Я не могу привести точный пример прямо сейчас (я дома на выходные), но я могу попробовать:

set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT * FROM TABLE WHERE ID=123", MyConnection, 1, 3
rs("MyDateTimeColumn") = Request.Form("MyTimeOnlyHtmlInput") 'Formatted as 07:14:50, for example
rs.Update 'Saved to the Data Base
rs.Close
rs.Open "SELECT * FROM TABLE WHERE ID=123", MyConnection, 1, 3 'Retrieving data back
echo "<input type='text' value='" & rs("MyDateTimeColumn") & "' />"

Этот код работал, я бы вводил «01:23:45» во ввод, отправлял его в этот код, и он печатал бы ввод только со временем. Прямо сейчас, что я получаю на входе "1899-12-30 01: 23: 45.000".

UPDATE: Я попросил нашего менеджера сервера помочь, он попробует MSFT как ресурс. Я обновлю это, если получу новости. Спасибо всем за помощь. Я обновлю это, если получу какие-нибудь новости.

Ответы [ 2 ]

0 голосов
/ 03 октября 2009

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

Дата «нуля» SQL-серверов - 1900-01-01, и она не изменилась
VBScripts "ноль" дата 1899-12-30, и это тоже не изменилось.

Нет системной настройки, которая влияет на одну из этих базовых дат.

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

0 голосов
/ 03 октября 2009

Я не понимаю деталей вашей реализации, но если вы знаете, что столбец предназначен только для того, чтобы содержать информацию о времени, почему бы просто не выбрать часть времени, подобную этой:

select convert(varchar(10), getdate(), 108)

Если вы храните время дольше, чем день, это становится немного сложнее. В этом случае вы можете сделать что-то вроде этого, чтобы выяснить, что такое базовая дата:

select case 
    when cast(0 as datetime) = '1900-01-01 00:00:00.000' then 0
    when cast(0 as datetime) = '1899-12-30 00:00:00.000' then 1
    else -1 --if you get this number back, throw an error
end

Если приведенный выше запрос возвращает 1, ваше приложение знает, что ему нужно добавить день к полученному значению, прежде чем определять временную часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...