为什么总是以为没有什么好学的,只有碰到问题了,才知道你有很多东西都不清楚,或者根本就不知道。
遇到的问题:系统时间与数据库时间不一致,系统时间是8:20,存到数据库里是0:20。
第一直觉是时区不同导致的。
先看一段代码:
public static void main(String[] args) {
//System.out.println(TimeZone.getDefault());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
//System.out.println(c.getTime());
System.out.println(sdf.format(c.getTime()));
System.out.println(c.getTimeInMillis());
TimeZone.setDefault(TimeZone.getTimeZone("GMT+5:00"));
sdf.setTimeZone(TimeZone.getDefault());
//System.out.println(c.getTime());
//System.out.println(c.getTime().getTimezoneOffset());
System.out.println(sdf.format(c.getTime()));
System.out.println(c.getTimeInMillis());
}
输出结果:
2011-11-25 10:33:21
1322188401796
2011-11-25 07:33:21
1322188401796
这说明,时间的显示是由时区决定的,时间所表示的距标准时间毫秒数是绝对的,不会随时区不同而改变。理解这一点很重要。
那么数据库里的时间也应该有个时区概念,那到底是如何处理的呢?一直这么认为的,时间在数据库里实际存的是毫秒数。那我们在客户端看到的时间一定是经过数据库格式化以后的。
但结果不完全是这样的,下面我们要讨论数据库中的两个时间类型 datetime 和 timestamp 。
网上有文称
datetime - 存储日期和时间部分,精确到秒,没有时区信息
timestamp - 时间戳,存储日期、时间和时区信息,秒值精确到小数点后6位
注意这里的时间戳,在sqlserver中根本就不是时间,他只记录相对时间的先后,不记录具体时间。我认为应该叫做数据版本号。
首先在sqlserver中测试:
select getdate()
执行结果跟想像的一样,操作系统的时区如何修改,他都能随之变化,他肯定获得了系统的时区信息,然后对当前毫秒数格式化。
把系统时区恢复到GMT+8:00,创建一个测试表,并插入两条数据
create table TEST_TIMEZONE(
tid int,
time1 datetime ,
time2 datetime
);
insert into TEST_TIMEZONE values(1,getdate(),getdate());
insert into TEST_TIMEZONE values(2,getdate(),getdate());
select * from TEST_TIMEZONE;
这时数据库查询结果为
1 2011-11-25 10:47:23.750 2011-11-25 10:47:23.750
2 2011-11-25 10:47:27.513 2011-11-25 10:47:27.513
现在修改系统时区为GMT+5:00,再插入两条数据,并修改第一条数据
insert into TEST_TIMEZONE values(3,getdate(),getdate());
insert into TEST_TIMEZONE values(4,getdate(),getdate());
update TEST_TIMEZONE set time1=getdate() where tid=1;
select * from TEST_TIMEZONE;
这时数据库查询结果为
1 2011-11-25 07:50:20.373 2011-11-25 10:47:23.750
2 2011-11-25 10:47:27.513 2011-11-25 10:47:27.513
3 2011-11-25 07:50:15.920 2011-11-25 07:50:15.920
4 2011-11-25 07:50:18.500 2011-11-25 07:50:18.500
因为datetime没有时区信息,只有年月日时分秒,所以保存的是几点就是几点,两次操作差了3个小时。
select t.*,t.time2-t.time1 from TEST_TIMEZONE t where t.tid=1
我们再看时间戳类型,sqlserver一个表只能有一个时间戳列,而且时间戳列不用操作,在数据行插入或更新时自动更新。
新建测试表
create table TEST_TIMEZONE2(
tid int,
time1 timestamp
);
insert into TEST_TIMEZONE2(tid) values(1);
insert into TEST_TIMEZONE2(tid) values(2);
insert into TEST_TIMEZONE2(tid) values(3);
select * from TEST_TIMEZONE2;
查询结果:
1 0x000000000000200A
2 0x000000000000200B
3 0x000000000000200C
update TEST_TIMEZONE2 set tid=4 where tid=3;
select * from TEST_TIMEZONE2;
查询结果:
1 0x000000000000200A
2 0x000000000000200B
4 0x000000000000200E
这个时间戳主要用在处理并发问题上,做为数据是否已被修改的凭证,可以提高并发性能。 再次明确sqlserver的时间戳不是具体时间。
恢复一下时区到GMT+8:00,都不知道现在几点了。
接下来,在mysql做个测试:
select now()
修改系统时区对查询结果没有影响,这与sqlserver不同。修改时区后,重启mysql,再执行有效果了。说明mysql在启动时记录了系统时区,而不是实时的读取系统时区。
恢复时区到GMT+8:00,新建 表
create table TEST_TIMEZONE(
tid int,
time1 datetime ,
time2 timestamp ,
time3 timestamp
);
插入数据
insert into TEST_TIMEZONE(tid) values(1);
insert into TEST_TIMEZONE(tid) values(2);
insert into TEST_TIMEZONE values(3,now(),now(),now());
insert into TEST_TIMEZONE values(4,now(),now(),now());
select * from TEST_TIMEZONE
查询结果

Mysql允许多个timestamp列,但只有第一列会自动更新,默认值 为
CURRENT_TIMESTAMP。
恢复时区到GMT+5:00,重启动mysql,执行查询

结果说明datetime的时间不随系统时区而变化,timestamp会随系统时区变化而变化,也sqlserver完全不同。Mysql在timestamp字段记录的是毫秒数,并且按初始的系统时区格式化后显示。
另外对oracle现在没有测试环境。
结论:
Datatime类型只保存年月日时分秒信息,不含时区。
Timestamp时间戳,不同数据库有不同的实现,不要用做业务列,更不能作为索引或键使用,他会自动被更新。
记得把时区恢复回去,不然比别人晚了好几个小时^_^

- 大小: 20.9 KB

- 大小: 29.2 KB
分享到:
相关推荐
内容概要:本文介绍了西门子S7-200模拟器bet2.5e版本的功能特点及其应用价值。该模拟器支持多种通讯协议如PPI和Modbus RTU,允许用户在没有真实PLC设备的情况下进行程序测试。它不仅能够模拟主站和从站的通讯,还可以便捷地导入用户程序并提供无限期使用的优势。尽管缺少网络通讯功能,但对于基础学习和简单项目的测试依然非常实用。 适合人群:工控领域的初学者、工程师和技术爱好者,尤其是那些希望在没有真实PLC设备的情况下进行编程和通讯测试的人。 使用场景及目标:适用于需要测试PLC程序和通讯协议的场景,帮助用户熟悉PLC编程和通讯机制,提高开发效率,减少硬件依赖。主要目标是在无硬件条件下完成程序调试和通讯测试。 其他说明:文中详细展示了如何使用VB.NET、Python和梯形图语言进行具体的编程实例,强调了注意事项如地址映射、波特率设置等。此外,还提到了一些替代方法来弥补网络通讯功能的不足,如使用虚拟串口工具。
内容概要:本文介绍了一款用于抽水蓄能容量优化配置的CPLEX程序,旨在帮助用户通过数学规划方法实现抽水蓄能电站的最佳容量配置。程序不仅提供详细的代码示例,还包括视频讲解,使编程小白也能轻松理解。文中详细解释了容量优化的目标、配置参数的选择以及储能出力的重要性,并展示了如何通过CPLEX库构建线性规划模型,设定目标函数、添加约束条件并求解模型。此外,文章还讨论了实际应用场景中的注意事项,如充放电效率、水库容量变化、负荷跟踪约束等,并提供了修改参数进行场景分析的方法。 适合人群:对抽水蓄能容量优化感兴趣的电力系统工程师、研究人员及编程爱好者。 使用场景及目标:适用于需要进行抽水蓄能容量优化的工程项目,目标是通过合理的容量配置降低运营成本,提高系统稳定性。用户可以通过修改配置文件中的参数,如抽水效率、电价等,来进行不同的场景分析。 其他说明:程序包内含实战讲解视频,有助于更好地理解和应用代码。代码中包含了多种实用技巧,如处理浮点数精度、时间序列数据等,这些都是实际项目中积累的经验。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了三泵恒压供水控制系统的硬件配置、PLC程序设计、触摸屏组态以及调试技巧。首先讨论了硬件配置的选择,包括变频器、压力传感器的安装位置及其重要性。接着深入探讨了PLC程序的核心逻辑,特别是PID压力调节和泵组轮换策略,确保系统能够高效节能地运行并延长设备寿命。此外,文章还强调了触摸屏组态的关键要素,如压力趋势图和手动干预界面的设计。最后,作者分享了一些调试经验和常见故障排除方法,如模拟量处理、滤波算法的应用以及紧急情况下的手动模式保障。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和恒压供水系统感兴趣的读者。 使用场景及目标:适用于需要设计和实施恒压供水控制系统的工程项目,帮助工程师掌握从硬件选型到软件编程再到系统调试的完整流程,最终实现稳定的供水控制。 其他说明:文中提供了详细的IO分配表、梯形图逻辑示例和触摸屏界面设计建议,有助于读者更好地理解和应用相关技术。同时,作者还分享了许多实践经验,为实际操作提供了宝贵的指导。
内容概要:本文详细介绍了利用西门子S7-200 PLC和组态王搭建三泵恒压供水系统的全过程。首先阐述了硬件配置,包括IO分配、接线方式以及变频器的使用方法。接着深入探讨了PLC程序的核心逻辑,特别是压力闭环控制和泵轮换策略的设计。文中还分享了组态王界面设计的经验,强调了动态压力曲线和手自动切换功能的重要性。最后,作者结合实际案例,指出了调试过程中常见的问题及其解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和HMI设计有一定基础的人群。 使用场景及目标:适用于需要构建高效稳定的恒压供水系统的工程项目。主要目标是确保系统能够根据管网压力自动切换水泵,保持压力稳定,同时提高设备使用寿命和维护效率。 其他说明:文章不仅提供了详细的理论讲解,还包括了许多实用的操作技巧和经验分享,有助于读者更好地理解和掌握相关技术和应用场景。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
将ppt转换成图片时,所有图片的文件名中会出现“幻灯片”三个字,这时,可以将本批处理文件复制到对应文件夹内,双击运行后,可以批量删除图片文件名中的“幻灯片”三个字。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了如何利用Matlab和CPLEX构建共享电动汽车的两阶段优化模型。首先,通过整数规划确定最佳充电站位置,考虑用户需求覆盖率和建设成本之间的权衡。其次,采用动态调度模型处理实时车辆分配,确保各区域需求得到满足的同时优化运营成本。文中还讨论了数据预处理技巧如K-means聚类、移动平均滤波以及CPLEX求解器的高效配置方法。 适合人群:从事交通规划、物流配送等领域研究的专业人士,尤其是对数学建模和优化算法有一定了解的研究人员和技术开发者。 使用场景及目标:适用于城市交通管理部门、共享汽车运营商等机构进行电动车基础设施布局规划和日常运营管理。主要目的是降低建设和运营成本,提高用户体验和服务质量。 其他说明:作者分享了许多实践经验,包括如何避免常见错误(如矩阵转置问题)、提高求解速度的小技巧(如稀疏矩阵的应用)以及如何通过可视化工具辅助结果分析。此外,还提到了一些潜在改进方向,如加入充电桩排队时间和路网结构的影响因素。
内容概要:本文旨在构建一种基于记忆序列回放机理的机器人全局路径优化算法模型。通过模拟大脑海马体和前额叶中的记忆回放过程,改进了传统的机器人导航算法。模型采用自适应的Top-k竞争规则和回报折扣思想,使得智能体能够在复杂障碍物环境中快速找到最短路径。实验结果显示,智能体经过1-3次探索即可收敛到稳定状态,并找到最短路径,验证了模型的有效性和快速收敛性。 适合人群:对机器人导航、智能算法、神经科学感兴趣的科研人员,尤其是从事机器人路径规划和认知计算模型研究的学者和工程师。 使用场景及目标:①适用于复杂环境下的机器人路径规划与导航任务;②用于研究大脑记忆回放机制及其对决策过程的影响;③提高机器人在未知环境中的自主学习和适应能力。 其他说明:该模型不仅在仿真环境中表现优异,还在真实机器人实验中得到了验证。通过ROS平台和MATLAB接口,实现了对智能小车的有效控制和路径优化。此外,模型的收敛性和鲁棒性优于现有的DN2和基于小脑及基底神经节的混合模型,显示出更强的适应性和更高的性能。
基于迁移学习的端到端发音检错研究.pdf
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了基于51单片机的酒精检测报警器的设计与实现,涵盖了硬件选型、软件编程、功能实现等方面的内容。文中提供了两种不同版本的ADC芯片(AD0809和AD0832),分别阐述了它们的工作原理、代码实现及其优缺点。此外,文章还讨论了系统的各个组成部分,如MQ-3酒精传感器、LCD1602显示屏、按键设置、声光报警等,并给出了详细的代码示例和调试技巧。 适合人群:对单片机开发有一定基础的学习者、电子爱好者、从事交通安全管理的技术人员。 使用场景及目标:适用于防止酒驾的安全监控场景,旨在提高驾驶安全性和减少交通事故的发生。通过本项目的实践,读者可以掌握单片机的基本应用技能,了解传感器数据采集、处理和反馈机制。 其他说明:文中不仅提供了完整的代码实现,还分享了许多实际开发过程中可能遇到的问题及解决方案,如传感器预热、按键防抖、ADC读取时序等。同时,作者强调了该项目作为DIY作品,在正式应用中应注意合法合规性。
内容概要:本文详细介绍了基于虚拟同步发电机(VSG)技术的光储并网系统控制策略,涵盖光伏MPPT控制、储能直流稳压、VSG控制、虚拟阻抗增加及低压穿越控制等方面。针对每个控制策略提供了具体的实现代码和应用场景分析,强调了这些策略在保障电力系统稳定性方面的重要作用。文中不仅讨论了理论背景,还给出了大量实用的代码片段和技术细节,有助于理解和实施这些先进的控制策略。 适合人群:从事新能源发电系统设计、开发和维护的专业技术人员,特别是对光储并网技术和VSG控制感兴趣的工程师。 使用场景及目标:适用于希望深入了解光储并网系统内部工作机制的研究人员和技术爱好者;旨在为解决实际工程项目中的技术难题提供指导和支持,确保光储并网系统能够在各种复杂的电网环境下稳定运行。 其他说明:文章中提到的技术和方法已在多个实际案例中得到验证,能够有效提升系统的性能和可靠性。此外,作者还分享了一些调试经验和常见错误规避技巧,对于初学者非常有价值。
内容概要:本文详细解析了中兴ZXD2400电源电路图4.1版本,涵盖输入、转换和输出三大部分。输入部分介绍了LC滤波电路的作用及其参数计算方法;转换部分围绕UC3842芯片的工作原理展开,展示了其通过比较反馈电压和参考电压来实现电压稳定转换的功能;输出部分讨论了线性稳压芯片的应用。此外,还深入探讨了PWM控制、MOSFET驱动、补偿网络、电压采样、保护电路等关键设计细节,并提供了多个Python代码片段用于参数计算和电路特性模拟。文章不仅帮助读者理解电源电路的工作机制,还分享了许多实际操作经验和注意事项。 适合人群:从事电源设计的技术人员、电子工程师、DIY爱好者。 使用场景及目标:适用于希望深入了解电源电路设计原理和技术细节的人群,旨在提高读者对电源系统的理解和实际应用能力。 其他说明:文中提供的Python代码片段有助于快速定位关键芯片位置、计算重要参数,便于理论联系实际。同时提醒读者关注版本变更说明,避免因使用旧版图纸而导致的问题。
派克气动专业的系统组件
健身房管理系统源代码.zip
内容概要:本文介绍了基于Matlab平台开发的一款悬架设计计算程序,涵盖了悬架系统的多个方面,如基础参数计算、部件匹配计算、力学校核和独立悬架特性计算。程序不仅提供了详细的计算方法和实例代码,还强调了实际应用中的注意事项和技术细节。通过该程序,用户可以高效地进行悬架设计,确保计算结果符合工程要求并提高设计精度。 适用人群:主要适用于学习群体和初入行的技术人员。对于学生来说,它是生动的教科书案例,帮助他们更好地理解和掌握悬架设计的基本概念和计算方法;对于技术人员,则是工作中的得力助手,能够快速完成复杂的悬架设计计算任务。 使用场景及目标:该程序广泛应用于汽车工程领域的悬架设计过程中。它可以用于教学演示、工程项目中的参数匹配和性能评估等场合。通过使用该程序,用户可以在短时间内获得准确可靠的计算结果,从而加快设计进度,减少手工计算带来的误差。 其他说明:程序经过多次工程验证,具有较高的可靠性和实用性。附带详细使用说明书,便于初次使用者快速上手。此外,文中还分享了一些作者在实际项目中积累的经验教训,有助于避免常见错误,进一步提升设计质量和效率。
TypeScript 是一种强大的静态类型编程语言,它是JavaScript的超集,为开发者提供了更丰富的语法、类型系统和工具链支持。这个“typescript例子-所有代码打包”压缩包包含了一个全面的TypeScript示例集合,名为“TypeScriptSamples-master”,旨在帮助初学者和有经验的开发者深入理解和实践TypeScript的各种特性。 在TypeScript中,静态类型系统是其核心特色之一。通过声明变量、函数参数和返回值的类型,编译器可以在编码阶段发现潜在的错误,而不是等到运行时才暴露出来。这极大地提高了代码的稳定性和可维护性。例如,在这个压缩包中,你可能会看到如何定义和使用各种类型的变量,如基本类型(number、string、boolean)、数组、对象、枚举以及联合类型等。 接口(Interface)是TypeScript的另一大亮点,它用于定义对象的形状,包括属性、方法等。在“TypeScriptSamples-master”中,你可能找到用接口来规范复杂数据结构的例子,例如定义一个用户对象或API响应模型。同时,接口可以用于类型合并,实现模块间的通信。 泛型是TypeScript中非常灵活的一个特性,它允许我们在编写代码时指定参数化类型,这样同一个函数或类就能处理多种类型的数据。通过查看压缩包中的代码,你可以学习到如何定义和使用泛型,以提高代码的复用性。 函数在TypeScript中也得到了强化,支持箭头函数、默认参数、rest参数和剩余参数。这些功能使得编写高阶函数和回调函数更加方便。在“TypeScriptSamples-master”中,你可能会遇到这些函数特性的实际应用案例。 另外,TypeScript还引入了类和模块的概念,支持面向对象编程。类让我们能够创建具有继承、封装和多态的复杂对象,而模块则允许我们组织代码,
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!