代码之家  ›  专栏  ›  技术社区  ›  Spidey

如何在兼容模式下为IIS(ASP)中的日期时间设置基准时间?

  •  0
  • Spidey  · 技术社区  · 15 年前

    我们已使用Windows 2008 Server更新了服务器,但仍在生产软件中使用SQL Server 2005。这个问题出现在系统的一个部分,我们将时间存储为日期时间。从那时起,在date time列中存储时间将基准日期存储为日期。在SQL Server 2005中是1900-01-01。在此之前,IIS了解这是默认情况,因此我们的ASP应用程序只打印日期时间的时间部分,并且我们的系统按预期工作。

    有了这个sa[i]d更新,基本日期时间似乎已更改为1899-12-30,因此我们的ASP页面显示完整的日期时间,例如1900-01-01 07:30:00,而不是仅显示时间(07:30:00),因为这不再是默认日期。

    我知道这不是系统的最佳方法,最初开发它的不是我,我只是维护它,所以我想知道在IIS配置菜单或Windows中是否有可以为应用程序设置基准日期的地方。我在其他地方读到过,SQLServer2005使用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”。

    更新: 我已经向我们的服务器管理器寻求帮助,他将尝试使用MSFT作为资源。如果有消息我会更新这个。谢谢大家的帮助。如果有消息我会更新这个。

    2 回复  |  直到 15 年前
        1
  •  0
  •   AnthonyWJones    15 年前

    你似乎是说这个问题只在升级到Windows2008时才出现。我觉得有点难以理解。

    SQL服务器的“零”日期是1900-01-01,并且没有更改
    vbscripts的“零”日期是1899-12-30,而且也没有改变。

    没有影响这些基准日期的系统设置。

    我怀疑你的系统中的其他东西改变了它的行为方式。它可能与服务器升级有关,但很难理解这是什么。一个正在工作但现在不正常的代码示例是好的?

        2
  •  0
  •   D'Arcy Rittich    15 年前

    我不理解您实现的细节,但是如果您知道该列只包含时间信息,为什么不选择这样的时间部分:

    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,那么您的应用程序知道在确定时间部分之前需要在检索值中添加一天。