【问题标题】:Sql date field is not getting saved exactlySql 日期字段未准确保存
【发布时间】:2009-11-04 12:36:46
【问题描述】:

我正在尝试在 sql 表的日期时间字段中插入日期值 '2010-03-14 02:00:00 AM'(2010 年的夏令时开始时间)服务器 2005。日期保存为 '2010-03-14 03:00:00 AM' 服务器安装在美国(EST 时区)。

谁能告诉我日期保存方式不同的原因?

谢谢 鲁巴

【问题讨论】:

  • 不,我不能,但是如果您以 UTC 存储时间,它可能会让您的生活更轻松。

标签: sql sql-server datetime insert


【解决方案1】:

当时钟从 0200 跳到 0300 时,其中一个时间不存在。

Wikipedia

当地时间的数字显示不会在班次时准确显示 02:00,而是从 01:59:59.9 向前跳到 03:00:00.0 或向后跳到 01:00:00.0。

在我看来,您应该将所有时间保存在 GMT/UTC 的数据库中,并且只使用客户端显示的本地时区 - 因此在数据库中所有时间都将单调递增(即时间不会跳回在夏令时结束时)

【讨论】:

  • 我只在 GMT 格式的数据库中插入记录。我的实际问题是我有第一个日期(2009-10-25 08:00:00 AM)和最后一个日期(2009-11-07 09:00:00 AM)。当这些日期在 GMT 的 DB 中保存为 firstdate(2009-10-25 12:00:00 PM)和 lastdate(2009-11-07 02:00:00 PM)时。 firstdate 和 lastdate(在前端)的时间差是 1 小时,保存到 db 后的时间差是 2 小时。如果我想在 db 中进行任何操作,由于前端和 DB 的不同变化,它会给出奇怪的结果。有什么想法可以解决这个问题吗?
  • 我很困惑。如果您输入“'2010-03-14 02:00:00 AM'(2010 年的夏令时开始时间)”,则不是 GMT,因为 GMT 没有夏令时。 (另外,如果使用英国时间,请注意更改时间是 0100 而不是 0200)我会将数据库设置为 GMT 而不是 EST。如果不是,您将不得不将输入时间从 GMT 转换为 EST
【解决方案2】:

格林威治标准时间!= UTC。 GMT 有夏令时,UTC 没有。 将日期保存为 UTC,一切顺利。

【讨论】:

  • 这是不正确的。 GMT 几乎是 UTC 的代名词。 UTC 是国际标准化的,GMT 不是。夏季夏令时,GMT 不变;英国进入 BST(英国夏令时),即 GMT+1。
【解决方案3】:

一点:根据定义,GMT 全年不变:在英国,GMT 或 BST(英国夏令时)都有一个。

除此之外,我会重新检查您的数据库和服务器的时区设置。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多