夏令时及java中常用方法
夏令时
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中常用方法相关推荐
- java 中常用方法_java_中常用的方法总结
8月1日 练习: 合理覆盖Cat数据类型的,equals()方法 Cat.java 1 覆盖hashCode() 返回的整型值是唯一的 int hashCode() 用法: 一般使用String ...
- java取number长度_Java中常用方法(NumberMath)
Java中常用方法(Number&Math) 包装类 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形.为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包 ...
- java中String的常用方法
java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len ...
- java中立方根方法_java基础:4、java中Math类的常用方法?
4.java中Math类的常用方法? Java的Math类封装了很多与数学有关的属性和方法.如下所示: System.out.println("计算平方根--Math.sqrt(81)-- ...
- Java中String类、字符串常量池、字符串常用方法
String类: String代表字符串类,java中所有双引号中的内容都称为字符串,如:"hello".字符串是不可改变的,因此字符串是可以共享使用的,相当于char字符数组,但 ...
- Java中的时间、时区和夏令时
相关概念 时区 时区是地球上的区域使用同一个时间定义.以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时).1863年,首次使用时区的概念.时区通过设立一个区域 ...
- java中math的方法_Java中Math类常用方法代码详解
近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void mai ...
- Java中夏令时问题
1. 夏令时 时区 Asia/Shanghai 存在夏令时 进入夏令时 时钟快一个小时,离开夏令时 时钟慢一个小时 GMT 标准时,不存在夏令时 Java中 默认,和系统有关 TimeZone.get ...
- 【Java中的菜单的常用方法】下拉菜单和弹出菜单
目录 Swing菜单组件 下拉式菜单 下拉式菜单的三个组件的详细讲解 下拉式菜单的创建与使用 创建和添加下拉式菜单的一般步骤 弹出式菜单 弹出式菜单的创建与使用 Swing菜单组件 下拉式菜单 创建一 ...
- Java中BigDecimal类常用方法,舍入策略
标题 Java BigDecimal 的舍入模式 (RoundingMode)详解 提一下银行家算法 BigDecimal和BigInteger Java中BigDecimal常用方法 BigDeci ...
最新文章
- 我在家乡写代码(一)
- tableau实战系列(七)-服务器日志清理和级别设置
- 命令行中创建和打开模Android拟器
- 一切为了运营!如何从推广短信链接唤起 App?
- gcc对C语言的扩展:局部标签声明(Locally Declared Labels)
- 云小课 | 到底什么是区块链?
- memcached linux 配置文件,Linux下Memcached服务器部署 | 系统运维
- Android摄影App,这20款摄影APP,让你的照片飞上天!
- 【WEB】HAR文件(http archive format)的介绍和查看
- oracle内连接和外连接
- Spring的三大核心思想
- Qt-设置completer下拉框样式
- Python基础: python3书籍推荐
- 计算机的认识文档,对计算机专业的认识.pdf
- 10.4 好老师就在你身边——《逆袭大学》连载
- React TypeScript react+ts 包下载
- PCB拼板设计对SMT生产效率到底有多大的影响?
- C++五子棋源码(Qt版)
- solr的DIH操作同步mysql数据
- 网卡链路聚合之team