夏令时【Daylight Saving Time】时间计算出错的解决办法

2024-01-24 09:50

本文主要是介绍夏令时【Daylight Saving Time】时间计算出错的解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

纠结了好几天,今天终于找到了解决办法,赶快分享一下:

在夏令时时区会出现的情况:

1、非夏令时:

2、夏令时:

3、Code:

       同样是两个时间相减,为什么夏令时和非夏令时不一样的,这实际上就是夏令时的规则,大概在每年的3月底,夏令时会自动将系统时钟跳快一小时,具体操作就是当时钟走到1:59时,下一刻是3:00;如果是夏令时改成非夏令时一般是在11月初,当时钟走到1:59时,下一刻是1:00。

        上面我计算的两个时间实际上是穿过夏令时的,如果你仔细计算一下(181-180,95833333..)*24,结果正好是一小时,也就是夏令时导致计算的时候少了一小时,这个就是我程序出错的根本原因,那么找到原因了,下一步就是找解决方案。

4、解决方案:

	/// <summary>/// Fixed TimeZone issue: Transfer the sDate1 and sDate2 to UTC, then minus./// </summary>this.dateDiff = function (sDate1, sDate2){//var days = parseInt((sDate1 - sDate2) / 1000 / 60 / 60 / 24);var d1 = Date.UTC(sDate1.getFullYear(), sDate1.getMonth(), sDate1.getDate(), sDate1.getHours(), sDate1.getMinutes(), sDate1.getSeconds(), sDate1.getMilliseconds());var d2 = Date.UTC(sDate2.getFullYear(), sDate2.getMonth(), sDate2.getDate(), sDate2.getHours(), sDate2.getMinutes(), sDate2.getSeconds(), sDate2.getMilliseconds());var days = (d1 - d2) / 1000 / 60 / 60 / 24;return days;}

       做时间相减的时候,找到当前时间对应的UTC[也叫GMT,格林威治]时间,然后再用两个UTC时间相减,这样得出来的结果就不会随着时区的改变而变化了。

        如果你有好的方法或者见解,欢迎与我讨论分享。


 

这篇关于夏令时【Daylight Saving Time】时间计算出错的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639301

相关文章

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指