`

夏令时导致数据错误

阅读更多

     中国曾在1986~19916年间实施过夏令时,具体作法是每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时间),再将时钟拨慢一小时,即将表针由2时拨至1时,夏令时结束。

这样会导致夏令时开始日实际只有23 小时,而夏令时结束日有25小时。

   夏令时日期范围:

1986504日至914日,

1987412日至913日,   

1988410日至911日,   

1989416日至917日,   

1990415日至916日,   

1991414日至915日。

 

一.准备工作,建表准备数据:

-- Create table
create table TEST_DATE_TABLE
(
  USER_NAME     VARCHAR2(100) not null,
  USER_PASSWORD VARCHAR2(50) not null,
  DATE_UPDATED  DATE default SYSDATE
);

insert into test_date_table (USER_NAME, USER_PASSWORD, DATE_UPDATED)
values ('TEST', '123', to_date('04-05-1986 00:30:00', 'dd-mm-yyyy hh24:mi:ss'));

insert into test_date_table (USER_NAME, USER_PASSWORD, DATE_UPDATED)
values ('TEST2', '132', to_date('14-09-1986 00:30:00', 'dd-mm-yyyy hh24:mi:ss'));

 

二.测试

DataTest.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;

public class DateTest {

    private static Connection connection = null;
    private static String url = "jdbc:oracle:thin:@10.25.17.141:1526:epcisdvp";
    
    /**
     * 创建连接
     * @return
     */
    public static Connection createConnection() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection(url, "deployop", "paic0987");
            return connection;
        } catch (ClassNotFoundException e) {
            return null;
        } catch (SQLException e) {
            return null;
        }
    }

    /**
     * 释放连接
     */
    public static void releaseConnection() {
        if (connection != null)
            try {
                connection.close();
            } catch (SQLException e) {
            }
    }

    public static void main(String[] args) {
        try {
            Statement statement = createConnection().createStatement(); 
            
            statement.executeUpdate("insert into test_date_table(user_name,user_password,date_updated) " +
            		"values('BJ001', '123', to_date('1986-05-04 00:30:00', 'yyyy-MM-dd HH24:mi:ss'))");
            ResultSet rs = statement.executeQuery("select USER_NAME, USER_PASSWORD, DATE_UPDATED " +
            		"from TEST_DATE_TABLE where USER_NAME = 'BJ001'");
            
//            statement.executeUpdate("insert into test_date_table(user_name,user_password,date_updated) " +
//            		"values('BJ002', '123', to_date('1986-05-03 23:30:00', 'yyyy-MM-dd HH24:mi:ss'))");
//            ResultSet rs = statement.executeQuery("select USER_NAME, USER_PASSWORD, DATE_UPDATED " +
//            		"from TEST_DATE_TABLE where USER_NAME = 'BJ002'");
            
            while (rs.next()) {
                //Date dateUpdated = rs.getDate("DATE_UPDATED");
                //Date dateUpdated = rs.getDate(3);
                Timestamp dateUpdated = rs.getTimestamp(3);
                System.out.println("dateUpdated=" + dateUpdated);
            }
            releaseConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

        测试结果:我插入的时间是:1986-05-04 003000,但查询出来的结果是:1986-05-04 013000

    查看数据库,发现表存储的是正确的。

 

PS测试环境:JDK1.6

  • 大小: 163.2 KB
  • 大小: 32.1 KB
分享到:
评论

相关推荐

    java 获取系统时间错误,少了8小时

    2. **夏令时问题**:夏令时可能导致时间的加减,尤其是在跨时区处理时。Java 8引入了`java.time`包,其中`ZonedDateTime`类能更好地处理这种情况。使用`ZonedDateTime.now(ZoneId.of("UTC"))`可获取当前的UTC时间。 ...

    基站建设与维护:全局数据配置.pptx

    首先,全局数据配置的起点是删除原始默认数据,这是为了确保配置的准确性,避免因遗留的旧数据导致的冲突或错误。接着,配置流程包括设置全局数据,如应用ID、gNodeB功能、运营商信息以及跟踪区等。例如,通过ADD ...

    耕地质量等别年更新评价中常见错误解读PPT课件.pptx

    耕地质量等别年更新评价是土地管理中的重要环节,它涉及到国家对农业资源的合理配置和...因此,在进行耕地质量等别年更新评价时,需严格遵循相关规定,确保所有数据和图件的准确无误,以提供可靠的土地管理决策依据。

    问题集锦1

    此外,系统应具备处理夏令时变化的能力,以确保时间信息的精确性。 以上三个问题反映了行为感知系统开发中的常见挑战,它们涉及数据处理、一致性保证以及全球化支持。在实际开发中,需要综合运用数据结构设计、...

    Ruby-TZInfoRubyTimezone库

    通过以上内容,我们可以看到Ruby-TZInfoRubyTimezone库在日期和时间处理中的关键作用,它是开发跨时区应用的重要工具,能够帮助开发者避免由于时区和夏令时处理不当导致的错误。在实际项目中,正确使用TZInfo库可以...

    sumtime:用于大量数据点总和和范围的简单 Nodes.js 服务

    【描述】提到的"夏令时"可能是指服务在处理时间数据时考虑了时区调整,特别是涉及到夏令时期间的时间转换。夏令时是一种为了节约能源而实行的制度,通常会在夏季将时钟向前调整一小时。在编程中处理夏令时需要特别...

    基于STM32+STemWin+FreeRTOS的主时钟

    自动夏令时 禁用自动夏令时 线路断开/暂停(共三种状态:STOP、START、OFF) 断电后自动校正线路上的时间及其随后的外观 在线手动时间校正 线路的独立时区 内置日历,可防止您设置错误的日期 线路消耗电流的指示 ...

    单片机解读GPS信息的程序设计

    这一步骤虽然简单,但在实际应用中至关重要,可以避免因错误或损坏的数据而导致的处理问题。 ### 4. 字符到数值的转换 GPS数据是以ASCII字符形式传输的,因此需要将字符转换为数值进行进一步的处理。文章中的`ASC_...

    tzdb.dat JRE8

    如果你的Java 8环境中tzdb.dat丢失或损坏,可能导致程序无法正确处理时区,出现日期时间错误,比如时区转换错误、夏令时处理不当等。在这种情况下,找到并替换tzdb.dat文件,如文中提到的"jre8-d"压缩包,就显得尤为...

    用C# 2005编写的一个世界时钟程序

    例如,用户可能选择不存在的时区,或者网络问题可能导致夏令时数据无法获取。我们需要设置合理的异常处理机制,并提供友好的用户提示。 最后,测试是必不可少的环节。我们需要在多种设备和操作系统版本上进行测试,...

    电子政务-单点固定电子警察系统自动校时方法.zip

    NTP具有高精度和稳定性,能有效解决时区和夏令时等问题。 2. **GPS同步**:部分电子警察设备内置了GPS接收器,可以接收到卫星发送的精确时间信息。这种方式不仅能够提供精确时间,还能在没有网络连接的情况下工作。...

    Daylight_Savings_Time_Example:此示例使用当前日期、UTC 时间和本地偏移量来生成正确的本地时间

    在实际应用中,理解并正确处理夏令时至关重要,因为不正确的时区转换可能导致日程安排错误、数据同步问题,甚至可能导致安全漏洞。因此,开发者需要确保对时区和夏令时的处理是精确且无误的。这个示例就是一个很好的...

    Python库 | dfdatetime-20161015.tar.gz

    4. **时区处理**:dfdatetime库处理时区转换,考虑到夏令时和其他区域性的时区变化。 5. **时间序列操作**:它提供了对时间序列数据的操作函数,比如时间间隔计算、时间范围判断等。 6. **兼容性**:dfdatetime库...

    错误:程序员相信X

    实际上,世界各地有不同的习惯,需要考虑到时区、夏令时和其他文化差异。为了避免这类问题,开发者应该使用适应各种格式的库,并进行充分的测试。 在处理用户输入时,程序员可能假设用户会按照预期的方式输入数据,...

    北京时间校准

    此外,对于支持夏令时的地区,软件需要能够自动处理夏令时的切换,以免出现时间错误。 总之,“北京时间校准”是一个确保计算机时间准确的重要任务,通过专门的软件工具可以方便快捷地完成。合理使用和配置这些工具...

    常见定时器问题解答

    4. 时区和夏令时:对于跨时区的应用,要考虑用户所在时区的影响,特别是涉及日期和时间的计算。处理好夏令时变化也是重要的一环。 5. 并发问题:在多线程环境下,多个定时器可能会并发执行,引发竞态条件。使用线程...

    IBM AIX服务器巡检流程.doc

    - `/etc/environment`中的TZ不应包含夏令时设置,避免时间问题。 - 如果有数据库,确保Aio服务可用。 - HACMP中的I/O pacing设置,如High Water Mark/Low Water Mark应为33/24。 - HACMP中Syncd的数量应保持在10...

    ZD电表IEC1107规约说明.pdf

    syymmddhhmm)ETXBCC”命令,其中S和s代表起始和结束时间的夏令时状态。 - **2.2.6 数据返回**: 电表返回负荷曲线数据,“STXP.01(电表负荷曲线数据,带时标…..)ETX BCC”。 - **2.2.7 错误情况**: 如果该时间段的...

    时间自动校正软件

    4. **考虑时区和夏令时**:软件应能自动处理时区转换和夏令时调整,以适应不同的地理位置。 5. **安全考量**:确保下载的软件来自可信源,避免携带恶意软件,因为时间同步功能也可能被恶意利用。 总的来说,时间...

Global site tag (gtag.js) - Google Analytics