我想检查夏令时开始之前和之后的时间差。 我正在使用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开始夏令时后的时间差异?相关推荐

  1. java时区转换 夏令时_实现时区的转换--涉及到冬令时和夏令时的时候

    #时区转换 主要是用来转换时区用的,特别涉及到冬令时和夏令时的区域,这样会很烦,所以需要用个方法来转换 这个主要是创建一些模型 using System; using System.Collectio ...

  2. java 判断是否夏令时_确定指定日期的Java夏令时(DST)是否处于活动状态

    我有一个Java类,它占用一个位置的纬度/经度,并在夏时制开启和关闭时返回GMT偏移量.我正在寻找一个简单的方法来确定Java如果当前日期是在夏令时间,所以我可以应用正确的偏移量.目前,我只对美国时区 ...

  3. java coin介绍_代码示例中的Java 7:Project Coin

    java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...

  4. java lock 效率_工作常用4种Java线程锁的特点,性能比较、使用场景

    多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...

  5. java布道师_初探第10代Java帝国:11位Java专家道出了他们最喜欢的功能

    Java 10发布后.我们第一时间与11位Java专家讨论了一波.顺便深入挖掘了他们在Java 10中最喜欢的功能和对未发布的JDK11版本的一些看法. " Java 10对Java 9来说 ...

  6. java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统

    一.需求分析 1.1 个人信息 学号.姓名.性别.年级.系别.专业.出生日期.联系方式.个性签名.地址.照片. 1.2 基本功能要求管理员信息管理 登录.注销功能 修改密码功能 部落成员信息管理 添加 ...

  7. flex+java项目创建_创建Flex 4和Java Web应用程序

    当前的Web技术对它们的需求不断增长. 他们必须能够管理用户帐户,上载内容和流视频. 这种需求要求RIA开发人员寻求简化开发工作流程的技术,同时提供常见的功能. 开发人员面临的挑战是选择正确的技术来提 ...

  8. cmd运行java语名_怎么用cmd运行java文件

    [怎么用cmd运行java文件]怎么在cmd里面执行java文件 找到存放要执行的JAVA的文件目录,然后在目录中运行CMD,运行JAVA程序之前要先编译,1.javac 文件名.java回车2.ja ...

  9. 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者

    原标题:从零基础学Java成为一个专业的java web 开发者 "我怎么才能成为一个Java Web开发者?"对于这个问题,答案其实并不简单.成为一个Java Web开发人员包括 ...

  10. java derby数据库_使用Apache Derby进行Java数据库开发,第3部分

    该"使用Apache Derby进行Java数据库开发"系列的上一篇文章向您展示了如何使用Java Statement对象在Apache Derby数据库上执行SQL SELECT ...

最新文章

  1. 自动驾驶汽车事故的责任追究
  2. Ellipse函数画圆
  3. 常用服务的默认端口号
  4. python中的reduce() 函数
  5. 《海龟交易法则》经典梳理
  6. java中ArrayList类的操作
  7. python np.cos 转化为角度_postman接口用例转化为python自动化测试用例(三)
  8. 常州网站服务器_常州服务器
  9. arguments.callee弃用与webuploader
  10. signature=d522a0024e7d20dbfee94b566a5dfed5,End-to-end (e2e) application packet flow visibility
  11. 通过HttpClient转发/调用HTTP请求
  12. gradle下载不下来依赖包_Gradle 下载依赖jar包及源码
  13. 如何在计算机设置鼠标宏,鼠标宏设置教程
  14. 射频功率dbm-w换算表
  15. 计算机学win7画图,利用windows画图工具新功能,制作简易3D画图很简单了!-win7画图工具...
  16. json表示map_简单json 转换为 map、对象
  17. 加州大学洛杉矶分校计算机硕士学费,美国加州大学洛杉矶分校计算机科学硕士.pdf...
  18. 「mt4软件」均线指标的应用方法
  19. 数据库创建表以及增删改查
  20. SpringBoot项目中增加favicon.ico图标

热门文章

  1. config配置解析
  2. 安装系统跳过创建用户,直接以超级管理员身份进入系统
  3. 基于Java swing的多人,图片,语音聊天室
  4. Python—Pycharm社区版下载、安装、配置、使用
  5. DOS命令:comp
  6. 私藏版64页DevOps笔记免费分享
  7. C语言实现连接MySQL服务器CURD
  8. 计算机占用空间怎么算,电脑系统我的电脑的C盘空间占用了19G还剩余8G,请问这算是正常 爱问知识人...
  9. Trimmed 稳健均值估计与 中位数-中位数配对偏差法估计标准差——理论与 Python 实现
  10. Global Round 16D2. Seating Arrangements (hard version)(模拟,贪心)