夏令时【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

相关文章

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法