首页 > 其他分享 >时区计算,冬夏令时, 计算历史某一刻的某地区的时区

时区计算,冬夏令时, 计算历史某一刻的某地区的时区

时间:2024-11-14 15:08:16浏览次数:1  
标签:00 夏令时 计算 sourceDate TimeZone 时区 calendar

首先来聊聊冬夏令时

冬令时和夏令时是为了节约能源和充分利用光照资源而设立的时间制度。在夏季,许多国家和地区会将时钟拨快一小时,称为夏令时,以便让人们早起早睡,减少照明用电。而在冬季,时钟会拨回标准时间,称为冬令时。‌

历史背景和实施国家

夏令时的概念最早由新西兰昆虫学家George Vernon Hudson在1895年提出,但未得到广泛响应。1907年,英国建筑师威廉·维莱特向英国议会提出了夏令时的构思,但未被采纳。德国于1916年首次正式使用夏令时,随后英国、法国和俄罗斯也开始执行。目前,全世界有近110个国家每年实行夏令时。

中国的实施情况

中国在1986年至1991年间曾实行夏令时制度。具体做法是每年从4月中旬的第一个星期日起将时钟拨快一小时,称为夏令时开始;到9月中旬的第一个星期日再拨回一小时,称为夏令时结束。然而,自1992年起,中国暂停实行夏令时

 

java 中获取时区的方式

1指定时区,这种就会忽略夏令时  因为指定了 -4

TimeZone tz = TimeZone.getTimeZone("GMT-04:00");

2指定地点城市,会自动计算夏令时

TimeZone tz = TimeZone.getTimeZone("America/New_York");

以new york为例

2024年 11 月 3 号调整了冬令时, 时区由-4 调整为 -5 

参考网站:

https://time.is/

 

我们来实际计算下 2024-11-02 13:00:00 的时区

    public static void main(String[] args) throws ParseException {
        //1指定时区为纽约
        ZoneId newYorkZoneId = ZoneId.of("America/New_York");
        TimeZone tz = TimeZone.getTimeZone(newYorkZoneId);

        //初始化一个时间格式化,并指定纽约时区
        FastDateFormat format = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", tz);

        //使用纽约时区,反序列化一个时间
        Date date = format.parse("2024-11-02 13:00:00");

        //获取时区
        ZonedDateTime pastTimeInNewYork = ZonedDateTime.ofInstant(date.toInstant(), newYorkZoneId);

        System.out.println("过去时间点的时区信息: " + pastTimeInNewYork.getOffset());

    }

 上面结果输出为


过去时间点的时区信息: -04:00

 

当我们将反序列化的时间 修改为 11月3号,

可以看到这里同样是纽约, 3号的时区已经变为-5, 因为调整了冬令时

 

 

这样的话我们就可以得到某个城市,某个时刻的  具体时区,这样就可以 准确的进行时间转换, 比如我们是东八区, 没有冬夏令时,  我们需要将时间转换为纽约时间

 

拓展:
介绍下时间转换方法

/**
 * 将sourceDate转换成指定时区的时间
 *
 * @param sourceDate
 * @param sourceTimezone sourceDate所在的时区
 * @param targetTimezone 转化成目标时间所在的时区
 * @return
 */
public static Date convertTimezone(Date sourceDate, TimeZone sourceTimezone, TimeZone targetTimezone) {
    Calendar calendar = Calendar.getInstance();
    //原时间
    long sourceTime = sourceDate.getTime();
    calendar.setTimeZone(sourceTimezone);
    calendar.setTimeInMillis(sourceTime);
    //获取源时区的到UTC的时区差
    int sourceZoneOffset = calendar.get(Calendar.ZONE_OFFSET);

    //目标时区
    calendar.setTimeZone(targetTimezone);
    calendar.setTimeInMillis(sourceTime);
    //获取目标时区的到UTC的时区差
    int targetZoneOffset = calendar.get(Calendar.ZONE_OFFSET);
    long targetTime = sourceTime + targetZoneOffset - sourceZoneOffset;
    return new Date(targetTime);
}

请注意,上面的targetTimezonetimeZone一定要是 根据城市获取的,而不是固定偏移量的

TimeZone.getTimeZone("America/New_York")

标签:00,夏令时,计算,sourceDate,TimeZone,时区,calendar
From: https://www.cnblogs.com/loveCrane/p/18545592

相关文章

  • 计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)
    1,绪论1.1课题背景近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们所需要的各种信息的处理操作都可以通过使用网页系统来完成,有了网页端的系统就......
  • 计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)
    1,概述1.1课题背景近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们所需要的各种信息的处理操作都可以通过使用网页系统来完成,有了网页端的系统......
  • 计算机毕业设计 | SpringBoot社区物业管理系统(附源码)
    1,概述1.1课题背景近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们所需要的各种信息的处理操作都可以通过使用网页系统来完成,有了网页端的系统......
  • 人工智能AI→计算机视觉→机器视觉→深度学习→在ImageNet有限小样本数据集中学习深度
    前言:通过前篇《人工智能AI→计算机视觉→机器视觉→深度学习→在ImageNet有限小样本数据集中学习深度模型的识别任务实践》我们可以学到如何对实际生活、工作场景中的字符识别、人脸识别、图像类别进行识别的基于深度学习方法的技术路径实现具体包括:准备数据集制作、创建深......
  • Vue2.0计算属性
     Vue2.0计算属性:     计算属性:通过计算得到一个属性,避免v-if和v-for出现在同一个标签上  <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initia......
  • LLM - 计算 多模态大语言模型 的参数量(Qwen2-VL、Llama-3.1) 教程
    欢迎关注我的CSDN:https://spike.blog.csdn.net/本文地址:https://spike.blog.csdn.net/article/details/143749468免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。影响(多模态)大语言模型参数量的主要网络模块,即Linear、Embedding、Norm(......
  • 计算机编程:二进制、八进制、十进制、十六进制转换
    1、二进制我们不妨将思维拓展一下,既然可以用0~9共十个数字来表示数值,那么也可以用0、1两个数字来表示数值,这就是二进制(Binary)。例如,数字0、1、10、111、100、1000001都是有效的二进制。在计算机内部,数据都是以二进制的形式存储的,二进制是学习编程必须掌握的基础。本节......
  • 计算机网络 实验三 常用网络管理命令(二)
    一、实验目的    掌握常用网络管理命令应用。二、实验原理    一般网络管理命令的原理就是在建立连接通道,然后发送一些测试数据包,对方接受后返回信息,而这个返回数据包包含一些网络状况的相关信息。常用的网络管理命令有netstat 命令、arp命令、tracert命令......
  • 【打破传统授信模型:基于深度神经网络 DNN模型的精确授信额度计算方法】-附完整python
    打破传统授信模型:基于深度神经网络DNN模型的精确额度计算方法模型结构概览数据预处理1.导入必要的库2.加载数据3.数据预处理4.构建深度神经网络模型5.模型训练与调参6.模型评估7.可视化训练过程9.完整代码深度神经网络(DeepNeuralNetwork,DNN),该模型通过K......
  • 基于nodejs+vue中小型酒店管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于酒店管理系统的研究,现有研究主要以大型酒店或连锁酒店为主,专门针对中小型酒店管理系统的研究较少。在国内外,大型酒店由于资源丰富、管理复杂,吸引了......