java 时区 夏令时_关于时区:如何显示Java开始夏令时后的时间差异?
我想检查夏令时开始之前和之后的时间差。 我正在使用JVM,其中时区与巴西时间的DST WRT存在一些问题。 我可以看到10月21日属于DST的输出,这是11月4日开始夏令时的错误。 我希望看到10月20日到10月21日之间的1小时的时间差,由于JRE时区问题,我可以在我的申请中看到。 我有什么方法可以通过一个程序实现这一目标。 下面是我用来查看日期是否在DST之下的代码。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Timezone
{
public static void main(String[] args) throws ParseException {
TimeZone TIMEZONE = TimeZone.getTimeZone("Brazil/East");
System.out.println("timeZone :" + TIMEZONE);
Calendar c = Calendar.getInstance(TIMEZONE);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TIMEZONE);
Date date = dateFormat.parse("2018-10-20T00:00:00");
c.setTime(date);
System.out.println("In dst" + c.getTimeZone().inDaylightTime(c.getTime()));
date = dateFormat.parse("2018-10-21T00:00:00");
c.setTime(date);
System.out.println("In dst" + c.getTimeZone().inDaylightTime(c.getTime()));
date = dateFormat.parse("2018-11-04T00:00:00");
c.setTime(date);
System.out.println("In dst" + c.getTimeZone().inDaylightTime(c.getTime()));
}
}
进一步添加到我的问题,我能够通过使用我的上述程序找出夏令时。 我想要一些它应该告诉我的东西:10月20日时间是上午9点,而同一时间由于DST转移了1小时,即上午10点。 有没有办法实现这个目标?
预期产量:
timeZone : sun.util.calendar.ZoneInfo[id="Brazil/East"]
Time is: 21-10-2018 07:52:16
实际输出故障JVM:
timeZone : timeZone : sun.util.calendar.ZoneInfo[id="Brazil/East"]
Time is: 21-10-2018 08:52:30
java.util.Timezone.inDaylightTime(Date date)等涵盖了此内容。
确定指定日期的夏令时(DST)是否在Java中处于活动状态的可能重复
谢谢你的回复。我能够知道使用上述程序可以改变夏令时。但我希望在10月20日显示类似于上午9点的情况,因为10月21日由于错误的夏令时转移到上午10点
如果突出显示JVM的ACTUAL和EXPECTED行为会更好,那么理解问题会更容易。
添加说明..
你有没有理由使用类TimeZone,Calendar,DateFormat,SimpleDateFormat和Date? 它们都设计得很差,现在已经过时了。 我建议使用现代Java日期和时间API java.time。
解决方案是使用故障(过时)时区数据修复JVM。使用Oracle的时区更新工具非常简单。请参阅底部的链接(对于OpenJDK,请参阅下一个链接)。
如果您想知道JVM"认为"夏令时(DST)何时开始,您可以使用以下代码:
ZoneId zone = ZoneId.of("America/Sao_Paulo");
ZoneRules rules = zone.getRules();
ZoneOffsetTransition dstStarted = rules.previousTransition(Instant.now());
System.out.println(dstStarted);
显然我的Java 11有11月4日夏天开始的新时区数据。我得到了这个输出:
Transition[Gap at 2018-11-04T00:00-03:00 to -02:00]
"差距"意味着时钟在夏季时间开始时向前转。向后翻转的时钟被打印为"重叠"。
如果需要,您还可以查询ZoneOffsetTransition有关转换前后的本地日期和时间,转换的瞬间,转换前后应用的UTC偏移,转换的签名长度(此处为1小时) )和其他信息。
我推荐java.time,现代Java日期和时间API。您使用的日期时间类 - TimeZone,Calendar,DateFormat,SimpleDateFormat和Date - 设计都很差,而且已经过时了。
链接
时区更新工具(适用于Oracle JDK)
如何更新OpenJDK的时区信息? (致Matt Johnson,在评论中提供此链接)
Oracle教程:日期时间,解释如何使用java.time。
提醒:还应该更新主机操作系统中的时区数据,Postgres等数据库引擎以及Joda-Time等库。
另外(对于OpenJDK):stackoverflow.com/q/29101788/634824
我将添加一个非常简短的答案。它表明1天不等于24小时,即DST改变了??。我也步入Java 8,因为我对它更熟悉。
ZoneId timezone = ZoneId.of("Brazil/East");
ZonedDateTime t = ZonedDateTime.of(2018, 10, 20, 7, 52, 16, 0, timezone);
System.out.println(t);
System.out.println(t.plus(1, ChronoUnit.DAYS));
System.out.println(t.plus(24, ChronoUnit.HOURS));
输出:
2018-10-20T07:52:16-03:00 [巴西/东]
2018-10-21T07:52:16-02:00 [巴西/东]
2018-10-21T08:52:16-02:00 [巴西/东]
java 时区 夏令时_关于时区:如何显示Java开始夏令时后的时间差异?相关推荐
- java时区转换 夏令时_实现时区的转换--涉及到冬令时和夏令时的时候
#时区转换 主要是用来转换时区用的,特别涉及到冬令时和夏令时的区域,这样会很烦,所以需要用个方法来转换 这个主要是创建一些模型 using System; using System.Collectio ...
- java 判断是否夏令时_确定指定日期的Java夏令时(DST)是否处于活动状态
我有一个Java类,它占用一个位置的纬度/经度,并在夏时制开启和关闭时返回GMT偏移量.我正在寻找一个简单的方法来确定Java如果当前日期是在夏令时间,所以我可以应用正确的偏移量.目前,我只对美国时区 ...
- java coin介绍_代码示例中的Java 7:Project Coin
java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...
- java lock 效率_工作常用4种Java线程锁的特点,性能比较、使用场景
多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...
- java布道师_初探第10代Java帝国:11位Java专家道出了他们最喜欢的功能
Java 10发布后.我们第一时间与11位Java专家讨论了一波.顺便深入挖掘了他们在Java 10中最喜欢的功能和对未发布的JDK11版本的一些看法. " Java 10对Java 9来说 ...
- java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统
一.需求分析 1.1 个人信息 学号.姓名.性别.年级.系别.专业.出生日期.联系方式.个性签名.地址.照片. 1.2 基本功能要求管理员信息管理 登录.注销功能 修改密码功能 部落成员信息管理 添加 ...
- flex+java项目创建_创建Flex 4和Java Web应用程序
当前的Web技术对它们的需求不断增长. 他们必须能够管理用户帐户,上载内容和流视频. 这种需求要求RIA开发人员寻求简化开发工作流程的技术,同时提供常见的功能. 开发人员面临的挑战是选择正确的技术来提 ...
- cmd运行java语名_怎么用cmd运行java文件
[怎么用cmd运行java文件]怎么在cmd里面执行java文件 找到存放要执行的JAVA的文件目录,然后在目录中运行CMD,运行JAVA程序之前要先编译,1.javac 文件名.java回车2.ja ...
- 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者
原标题:从零基础学Java成为一个专业的java web 开发者 "我怎么才能成为一个Java Web开发者?"对于这个问题,答案其实并不简单.成为一个Java Web开发人员包括 ...
- java derby数据库_使用Apache Derby进行Java数据库开发,第3部分
该"使用Apache Derby进行Java数据库开发"系列的上一篇文章向您展示了如何使用Java Statement对象在Apache Derby数据库上执行SQL SELECT ...
最新文章
- 自动驾驶汽车事故的责任追究
- Ellipse函数画圆
- 常用服务的默认端口号
- python中的reduce() 函数
- 《海龟交易法则》经典梳理
- java中ArrayList类的操作
- python np.cos 转化为角度_postman接口用例转化为python自动化测试用例(三)
- 常州网站服务器_常州服务器
- arguments.callee弃用与webuploader
- signature=d522a0024e7d20dbfee94b566a5dfed5,End-to-end (e2e) application packet flow visibility
- 通过HttpClient转发/调用HTTP请求
- gradle下载不下来依赖包_Gradle 下载依赖jar包及源码
- 如何在计算机设置鼠标宏,鼠标宏设置教程
- 射频功率dbm-w换算表
- 计算机学win7画图,利用windows画图工具新功能,制作简易3D画图很简单了!-win7画图工具...
- json表示map_简单json 转换为 map、对象
- 加州大学洛杉矶分校计算机硕士学费,美国加州大学洛杉矶分校计算机科学硕士.pdf...
- 「mt4软件」均线指标的应用方法
- 数据库创建表以及增删改查
- SpringBoot项目中增加favicon.ico图标
热门文章
- config配置解析
- 安装系统跳过创建用户,直接以超级管理员身份进入系统
- 基于Java swing的多人,图片,语音聊天室
- Python—Pycharm社区版下载、安装、配置、使用
- DOS命令:comp
- 私藏版64页DevOps笔记免费分享
- C语言实现连接MySQL服务器CURD
- 计算机占用空间怎么算,电脑系统我的电脑的C盘空间占用了19G还剩余8G,请问这算是正常 爱问知识人...
- Trimmed 稳健均值估计与 中位数-中位数配对偏差法估计标准差——理论与 Python 实现
- Global Round 16D2. Seating Arrangements (hard version)(模拟,贪心)