夏令时

1. 概念

夏令时,(Daylight Saving Time:DST),也叫夏时制,又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。

1986年4月,中国中央有关部门发出“在全国范围内实行夏时制的通知”,具体做法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。

参考百度百科:https://baike.baidu.com/item/%E5%A4%8F%E4%BB%A4%E6%97%B6/1809579?fr=aladdin

2. Java中的常见方法

判断是否为夏令时,根据指定日期时间和指定时区:

    /*** 是否是夏令时** @param zoneIdString 时区id* @param instant      时间信息* @return 是否是夏令时*/public static boolean isDST(String zoneIdString, Instant instant) {ZoneId zoneId = ZoneId.of(zoneIdString);ZoneRules rules = zoneId.getRules();return rules.isDaylightSavings(instant);}

详细请参考:

package com.ysx.utils.datetime;import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.zone.ZoneRules;/*** @author youngbear* @email youngbear@aliyun.com* @date 2022/6/26 12:38* @blog https://blog.csdn.net/next_second* @github https://github.com/YoungBear* @description 夏令时* 参考:http://www.timeofdate.com/* 美国的夏令时,从每年3月第2个星期天凌晨开始,到每年11月第1个星期天凌晨结束。以2017年为例,美国2017年夏令时从3月12日开始,到11月5日结束。* America/New_York PT1H -04:00* 参考:http://www.timeofdate.com/country/United%20States* 澳大利亚的夏令时:从每年10月的第1个周日凌晨开始,到每年4月第1个周日凌晨结束。以2017年为例,澳大利亚在4月2日结束夏令时,在10月1日重新开始夏令时* Australia/Sydney PT1H +11:00* http://www.timeofdate.com/country/Australia*/
public class DSTUtils {/*** 是否是夏令时** @param zoneIdString 时区id* @param instant      时间信息* @return 是否是夏令时*/public static boolean isDST(String zoneIdString, Instant instant) {ZoneId zoneId = ZoneId.of(zoneIdString);ZoneRules rules = zoneId.getRules();return rules.isDaylightSavings(instant);}/*** 是否是夏令时** @param zoneIdString 时区id,如Asia/Shanghai* @param localDateTime localDateTime* @return 是否是夏令时*/public static boolean isDST(String zoneIdString, LocalDateTime localDateTime) {ZoneId zoneId = ZoneId.of(zoneIdString);Instant instant = localDateTime.atZone(zoneId).toInstant();return isDST(zoneIdString, instant);}/*** 是否是夏令时** @param zoneIdString 时区id,如Asia/Shanghai* @param timestamp 时间戳 如1655301989483L* @return 是否是夏令时*/public static boolean isDST(String zoneIdString, long timestamp) {return isDST(zoneIdString, Instant.ofEpochMilli(timestamp));}/*** 是否是夏令时** @param zoneIdString     时区id,如Asia/Shanghai* @param isoLocalDateTime iso日期时间格式,如:2022-06-15T22:06:29.483* @return 是否是夏令时*/public static boolean isDST(String zoneIdString, String isoLocalDateTime) {DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;ZoneId zoneId = ZoneId.of(zoneIdString);dateTimeFormatter.withZone(zoneId);LocalDateTime localDateTime = LocalDateTime.parse(isoLocalDateTime, dateTimeFormatter);return isDST(zoneIdString, localDateTime);}
}

3. 常见国家地区夏令时

详细夏令时规定可参考:http://www.timeofdate.com/

时区ID字符串 标准偏移值standardOffset 是否有夏令时 使用夏令时的偏移值offset
Asia/Shanghai +08:00
Europe/London +00:00 +01:00
Europe/Paris +01:00 +02:00
Europe/Berlin +01:00 +02:00
Europe/Moscow +03:00
Asia/Seoul +09:00
Asia/Tokyo +09:00
Australia/Sydney +10:00 +11:00
America/Los_Angeles -08:00 -07:00
America/New_York -05:00 -04:00

获取方法:

package com.ysx.utils.datetime;import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.zone.ZoneRules;
import java.util.Set;/*** @author youngbear* @email youngbear@aliyun.com* @date 2022/6/15 23:18* @blog https://blog.csdn.net/next_second* @github https://github.com/YoungBear* @description 获取全球时区信息*/
public class ZoneIdUtils {public static void main(String[] args) {Instant instant = Instant.now();Set<String> zoneIds = ZoneId.getAvailableZoneIds();System.out.println(zoneIds.size());zoneIds.stream().sorted().forEach(zoneIdString -> {ZoneId zoneId = ZoneId.of(zoneIdString);ZoneRules rules = zoneId.getRules();// 当前offsetZoneOffset offset = rules.getOffset(instant);// 标准offsetZoneOffset standardOffset = rules.getStandardOffset(instant);// 是否为夏令时boolean daylightSavings = rules.isDaylightSavings(instant);System.out.println(zoneIdString + ", offset: "+ offset + ", standardOffset: " + standardOffset+ ", daylightSavings: " + daylightSavings);});}
}

相关文章

1. LocalDateTime ZonedDateTime Instant 的相互转换

2. 日期时间格式化与解析

3. 带时区时间日期 ZonedDateTime

4. 夏令时

源代码地址

夏令时及java中常用方法相关推荐

  1. java 中常用方法_java_中常用的方法总结

    8月1日 练习: 合理覆盖Cat数据类型的,equals()方法 Cat.java 1 覆盖hashCode() 返回的整型值是唯一的 int    hashCode() 用法: 一般使用String ...

  2. java取number长度_Java中常用方法(NumberMath)

    Java中常用方法(Number&Math) 包装类 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形.为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包 ...

  3. java中String的常用方法

    java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len ...

  4. java中立方根方法_java基础:4、java中Math类的常用方法?

    4.java中Math类的常用方法? Java的Math类封装了很多与数学有关的属性和方法.如下所示: System.out.println("计算平方根--Math.sqrt(81)--  ...

  5. Java中String类、字符串常量池、字符串常用方法

    String类: String代表字符串类,java中所有双引号中的内容都称为字符串,如:"hello".字符串是不可改变的,因此字符串是可以共享使用的,相当于char字符数组,但 ...

  6. Java中的时间、时区和夏令时

    相关概念 时区 时区是地球上的区域使用同一个时间定义.以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时).1863年,首次使用时区的概念.时区通过设立一个区域 ...

  7. java中math的方法_Java中Math类常用方法代码详解

    近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void mai ...

  8. Java中夏令时问题

    1. 夏令时 时区 Asia/Shanghai 存在夏令时 进入夏令时 时钟快一个小时,离开夏令时 时钟慢一个小时 GMT 标准时,不存在夏令时 Java中 默认,和系统有关 TimeZone.get ...

  9. 【Java中的菜单的常用方法】下拉菜单和弹出菜单

    目录 Swing菜单组件 下拉式菜单 下拉式菜单的三个组件的详细讲解 下拉式菜单的创建与使用 创建和添加下拉式菜单的一般步骤 弹出式菜单 弹出式菜单的创建与使用 Swing菜单组件 下拉式菜单 创建一 ...

  10. Java中BigDecimal类常用方法,舍入策略

    标题 Java BigDecimal 的舍入模式 (RoundingMode)详解 提一下银行家算法 BigDecimal和BigInteger Java中BigDecimal常用方法 BigDeci ...

最新文章

  1. 我在家乡写代码(一)
  2. tableau实战系列(七)-服务器日志清理和级别设置
  3. 命令行中创建和打开模Android拟器
  4. 一切为了运营!如何从推广短信链接唤起 App?
  5. gcc对C语言的扩展:局部标签声明(Locally Declared Labels)
  6. 云小课 | 到底什么是区块链?
  7. memcached linux 配置文件,Linux下Memcached服务器部署 | 系统运维
  8. Android摄影App,这20款摄影APP,让你的照片飞上天!
  9. 【WEB】HAR文件(http archive format)的介绍和查看
  10. oracle内连接和外连接
  11. Spring的三大核心思想
  12. Qt-设置completer下拉框样式
  13. Python基础: python3书籍推荐
  14. 计算机的认识文档,对计算机专业的认识.pdf
  15. 10.4 好老师就在你身边——《逆袭大学》连载
  16. React TypeScript react+ts 包下载
  17. PCB拼板设计对SMT生产效率到底有多大的影响?
  18. C++五子棋源码(Qt版)
  19. solr的DIH操作同步mysql数据
  20. 网卡链路聚合之team

热门文章

  1. Java是如何存储元素的(3)—Map集合存储数据原理(为什么HashMap集合的key部分的特点是无序,不可重复)
  2. 遥感影像地图分类识别的研究与实现
  3. 鄱.阳.湖.7月13日遥感数据汇总及共享
  4. 走近汇编理解与内核编程(楚狂人)
  5. 相机标定matlab版本,相机标定 matlab
  6. Greedy Method
  7. 瑞星杀毒软件影响Applet无法启动的解决方法
  8. ubuntu图形界面乱码解决办法
  9. Fabric0.6 与1.0
  10. 网页打开微信/跳转微信