java时区,时间处理类等概念总结

史上最全 时区枚举类 也直接上代码了!! package com.fanhf.javastudy.enumTest; import org.apache.commons.lang3.StringUtils; public enum ZoneEnum { ACT("ACT", "Australia/Darwin"), AET("AET", "Australia/Sydney"), AGT("AGT", "America/Argentina/Buenos_Aires"), ART("ART", 阅读详情
Java中时区概念

UTC: 协调世界时,又称世界统一时间、世界标准时间、国际协调时间。UTC也是指零时区的时间。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。协调世界时区使用“Z”来表示。
GMT: 格林尼治标准时间。格林尼治标准时间是19世纪中叶大英帝国的基准时间,同时也是事实上的世界基准时间。

GMT和UTC对比: 在不需要精确到秒的情况下,通常将GMT和UTC视作等同。但UTC 更加科学更加精确,它是以原子时为基础,在时刻上尽量接近世界时的一种时间计量系统。在平常的java开发中将GMT和UTC视作相等即可。

Asia/Shanghai: 我们平常开发默认使用的时区,也可以简单的认为等同于东八区时区(UTC/GMT+08:00),即比世界标注时间快8个小时。程序运行如下:其中ZoneId是Java8新加的代表一个时区的类。
在这里插入图片描述

上述代码以及时间输出格式分析: 可以看出,Asia/Shanghai和UTC相差时间基本为8个小时

System.out.println(Instant.now());
System.out.println(LocalDateTime.now());
System.out.println(ZonedDateTime.now());
System.out.println(LocalDateTime.now(ZoneId.of("+00:00"))); //0时区的现在时间
System.out.println(ZonedDateTime.now(ZoneId.of("+00:00"))); //0时区的现在时间

---------------------------------------------------
//世界标准时间,其中T表示时分秒的开始(或者日期与时间的间隔),Z表示这是一个世界标准时间
2019-12-05T09:50:22.874Z
//不含时区信息的时间,末尾没有Z
2019-12-05T17:50:22.968
//含有时区信息的时间,+08:00表示该时间是由世界标准时间加了8个小时得到的,[Asia/Shanghai]表示时区
2019-12-05T17:50:22.969+08:00[Asia/Shanghai]
2019-12-05T09:50:22.874
2019-12-05T09:50:22.874Z
Java8时间类对比

主要4类: String、Instant、LocalDateTime、ZonedDateTime。String是格式化的时间,Instant是时间戳,LocalDateTime是不含时区信息的时间,ZonedDateTime是含有时区信息的时间。

  • 其中String和LocalDateTime是等价的,本质上都是以字符串的形式输出,不带有任何时区信息。
  • Instant与ZonedDateTime是等价的,两者都是带有时区信息的。

其它一些类以及示例:

Clock: 该类用于获取指定时区的当前日期、时间。可取代System类的currentTimeMillis()方法,而且提供了更多方法来获取当前日期、时间。
Duration: 该类代表持续时间。可以非常方便地获取一段时间。
LocalDate: 该类代表不带时区的日期,例如2019-12-05。
LocalTime: 该类代表不带时区的日期,例如18:20:20。
MonthDay: 该类仅代表月日,例如--04-12。注意月份前面会有两个横杠。
Year: 该类仅代表年,例如2019。
YearMonth: 该类仅代表年月,例如2019-12。
DayOfWeek: 这是一个枚举类,定义了周日到周六的枚举值。
Month: 这也是一个枚举类,定义了一月到十二月的枚举值。

上述时区说明可参考以下两个博客:https://www.cnblogs.com/jixp/articles/10587494.html
https://www.cnblogs.com/oldtrafford/p/9680791.html
时区以及时间类对比可参考(个人觉得写的蛮好的):https://blog.youkuaiyun.com/u012107143/article/details/78790378

时间格式类

DateFormat: DateFormat是一个抽象类,它提供了如下几个类方法用于获取DateFormat对象。目前基本不怎么使用了,一般都使用SimpleDateFormat。但是这边还是记录一下。

  • getDateInstance(): 返回一个日期格式器,它格式化后的字符串只有日期,没有时间。该方法可以传入多个参数,用于指定日期样式和Locale(简单来说是用于提供国际化参数,里面有不同的国家和语言记录)等采纳数;如果不指定这些参数,则使用默认参数。
  • getTimeInstance(): 返回一个时间格式器,它格式化后的字符串只有时间,没有日期。该方法可以传入多个参数,用于指定时间样式和Locale等参数;如果不指定这些参数,则使用默认参数。
  • getDateTimeInstance(): 返回一个日期、时间格式器,它格式化后的字符串既有日期,也有时间。该方法可以传入多个参数,用于指定日期样式、时间样式和Locale等参数;如果不指定这些参数,则使用默认参数。

  上面三个方法可以指定日期样式.时间样式参数,它们是DateFormat的4个静态常量:FULL、LONG、MEDIUM和SHORT,通过这4个样式参数可以控制生成的格式化字符串。反之,将字符串解析成Date对象时,也要符合上述4个样式参数。其中MEDIUM为默认方式(可查看源码)。具体字符串格式如下:

将字符串解析为Date的代码如下所示,对应的,将Date解析成字符串使用的是format函数,传入Date对象即可:

SimpleDateFormat: 前面介绍的DateFormat的parse()方法可以把字符串解析成Date对象,但实际上DateFormat的parse()方法不够灵活-它要求被解析的字符串必须满足特定的格式!为了更好地格式化日期、解析日期字符串,Java提供了SimpleDateFormat类。
  SimplateDateFormat是DateFormat的子类,正如它的名字所暗示的,它是“简单”的日期格式器。SimpleDateFormat比DateFormat更简单,但功能却更强大。下面给出示例:

Date d1 = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("Gyyyy年中第D天");
//将d1格式化成字符串,输出:公元2019年中第339天
String dateStr = sdf1.format(d1);
System.out.println(dateStr);

String str = "2019-12-05";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date d2 = sdf2.parse(str);
//将日期字符串解析成日期,输出:Thu Dec 05 00:00:00 CST 2019
System.out.println(d2);

  从上面的程序中可以看出,使用SimpleDateFormat可以将日期格式格式化成形如“公元2019年中第339天”这样的字符串,也可以把形如“2019-12-05”这样的字符串解析成日期,功能非常强大。SimpleDateFormat把日期格式化成怎样的字符串,以及能把怎样的字符串解析成Date,完全取决于创建该对象时指定的pattern参数,pattern是一个使用日期字段占位符的日期模板。

DateTimeFormatter: 该类是Java8新增的日期、时间格式器,主要用于LocalDateTime,LocalDate,LocalTime等Java8新增的时间类。该类位于java.time.format包下面,相当于前面介绍的DateFormat和SimpleDateFormat的合体,功能相当强大。
  为了使用DateTimeFormatter进行格式化和解析,必须先获取DateTimeFormatter对象,获取DateTimeFormatter对象有如下三种常见的方式。

  • 直接使用静态常量创建DateTimeFormatter格式器。DateTimeFormatter类中包含了大量形如ISO_LOCAL_DATE、ISO_LOCAL_TIME 、ISO_LOCAL_DATE_TIME等静态常量,这些静态常量本身就是DateTimeFormatter实例。
  • 使用代表不同风格的枚举值来创建DateTimeFormatter格式器。在FormatStyle枚举类中定义了FULL、LONG、MEDIUM、SHORT四个枚举值,他们代表日期、时间的不同风格。
  • 根据模式字符串来创建DateTimeFormatter格式器。类似于SimpleDateFormat,可以采用模式字符串来创建DateTimeFormatter,如果需要了解DateTimeFormatter支持哪些模式字符串,则需要参考该类得API文档。

简单代码示例

LocalDateTime ldt1 = LocalDateTime.now();
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//将ldt1格式化成字符串,输出:2019-12-05 20:17:40
String dateStr1 = dtf1.format(ldt1);
System.out.println(dateStr1);

String dateStr2 = "2019-12-05 20时16分42秒";
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH时mm分ss秒");
//将日期字符串解析成日期,输出:2019-12-05T20:16:42
LocalDateTime ldt2 = LocalDateTime.parse(dateStr2,dtf2);
System.out.println(ldt2);

部分内容参考自疯狂java讲义第四版,若有侵权,欢迎联系删除。

Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍 Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍 一、背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决问题即完事,久而久之,导致对这个概念特别模糊。直到近期,做项目的过程中使用了mybatis-plus框架... 阅读详情

相关推荐

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3595

Java中各国时区枚举值

马其顿(前南斯拉夫的马其顿共和国)圣文森特和格林纳丁斯。波斯尼亚和赫泽戈维纳。刚果(民主党众议员)刚果(民主党众议员)

yangmingtia的博客 1742

Python逆向爬取Tik Tok,MsToken,X-Bogus以及signature

tiktok作为字节海外的自媒体平台,具有很非常大的价值,本文旨在教会大家实现Tik Tok的签名获取以及数据的最终爬取。

weixin_74305707的博客 3268

全球城市ZoneId和UTC时间偏移量的最全对照表

送你,收好,不谢

架构师:通透,才能写出好代码! 1万+

干扰管理学习日志4-------信道估计方法 LS(最小二乘)、MMSE(最小均方误差)

信道估计,就是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。需强调的是信道估计是信道对输入信号影响的一种数学表示,而“好”的信道估计则是使得某种估计误差最小化的估计算法。本文主要讲述非盲信道估计中的LS估计和MMSE估计。LS全称为,即估计的信道参数与实际信道参数的差,进行平方求和后得到的误差累积最小。MMSE估计是LS估计的改进,在LS估计的最终结果的基础上乘以加权矩阵,使之与实际信道参数更为接近。

taiyuezyh的博客 1万+

手机流畅的秘密:拆解LPDDR5X在骁龙8 Gen2平台上的电源与信号完整性设计

本文深入解析了LPDDR5X内存与骁龙8 Gen2处理器在旗舰手机中的协同设计,重点探讨了0.5V超低电压下的电源完整性设计以及8.5Gbps高速传输中的信号完整性挑战。通过详细的电源树架构、关键器件选型和布线策略分析,揭示了如何实现高性能与低功耗的完美平衡,为手机流畅体验提供硬件保障。

weixin_30235225的博客 484

Java基础知识-第8章-Java枚举类

这篇文章主要介绍了 Java 枚举(enum)的相关知识,包括枚举类概述、对象调用、自定义枚举类、使用 Enum 关键字定义枚举类、枚举类成员、常用方法、实现接口、在内部类和 switch 中使用、实现策略模式和单例模式,以及枚举保证线程安全的原理等。

LanMei的博客 995

01-FreeSWITCH 的安装、部署、配置以及可能遇到的问题和解决方法

一文让您了解从FreeSWITCH 的安装、部署、配置、可能遇到的问题及解决方法。一切从实际项目出发,以工程应用为目的。

秋风的博客 2127

探索java中复杂的时区

Java 中的时区到底是什么东西,Spring 时间格式化怎么用,本文告诉你

作草分茶 2063

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

Unity 热更新技术 | (二) AssetBundle - 完整系列教程学习

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来从 AssetBundle - 完整系列教程学习 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

关于Java中的时间处理,你真的了解吗?

首先我们看下第一道题: 在Java中,如何获取不同时区的当前时间? 你知道这道题的正确答案应该如何回答吗?背后的原理又是什么呢? 接下来,我们看下第二道题: 为什么以下代码无法得到美国时间。(在东八区的计算机上) System.out.println(Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")).ge...

360linker 378

Monorepo与pnpm:前端项目管理的完美搭档

pnpm又称 performant npm,翻译过来就是高性能的npm。Monorepo是一种项目开发与管理的策略模式,它代表"单一代码仓库"(Monolithic Repository)。在Monorepo模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。

m0_68271787的博客 2562

cdate在java中_关于Java中的时间处理,你真的了解吗?

之前在我的知识星球的直面Java板块中,给粉丝们出了这样一道题:在Java中,如何获取不同时区的当前时间?你知道这道题的正确答案应该如何回答吗?背后的原理又是什么呢?然后,紧接着,我又提出了以下问题:为什么以下代码无法得到美国时间。(在东八区的计算机上)System.out.println(Calendar.getInstance(TimeZone.getTimeZone("America/Los...

weixin_39885690的博客 494

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java 中的日期与时间处理!

前言 学习 Java 的过程中,难免会跟时间处理打交道,那我们今天就来看看,Java 中最常见的一些日期和时间处理的知识。 基本概念 本地时间 即所处地区所处时区的时间; 时区 要准确表达时间,还要依赖时区,时区表达方式主要有如下三种: GMT 或 UTC 加时区偏移表示 ,如 GMT+08:00 表示东八区; 缩写 ,如 CST 表示中国标准世界,但同时也表示美国中部时间; 洲 / 城市,如 Asia/Shanghai; 本地化 使用 Locale 表示一个国家或地区的日期、时间、数字、货币等格式,由

村雨遥 762

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java 日期和时间

日期2020-10-24:2020 年 10 月 24 日。1998-6-14:1998 年 6 月 14 日。时间带日期的时间:例如,表示 2020 年 10 月 24 日 8 时 30 分 23 秒。不带日期的时间:例如11:22:33,表示 11 时 22 分 33 秒。由于地球上的不同地区存在时差,因此准确定位一个时刻需要加上时区信息。GMT/UTC 加时区偏移:例如GMT+08:00或UTC+08:00表示东八区。缩写表示:例如CST。

体系化很难,碎片归纳很简单。 690

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

时间戳如何转换为其他时区以及时间戳和时区定义(附代码)

时间戳如何转换为其他时区,时间戳的定义和时区的定义

LkmLym的博客 8948

JAVA时间类及java8新时间类

文章目录java.util.Date时区时间戳java.util.Date基本使用初始化输出时间输出时差打印毫秒数比较时间java.util.Date的子类java.sql.Date的使用java.sql.Timestamp使用java.sql.Time使用SimpleDateFormat使用Calender 使用java8 新特性—java.time包 时间处理类LocalDate类LocalTime 类LocalDateTime 类Instant类Duration类Period类时间加减操作 java

jssd的博客 699

从零开始学Java62之时间相关的类有哪些?_at java

如果我们想在Java中获取当前的时间,可以使用java.util.Date类和类来实现。其中,Date类封装了系统的日期和时间信息,Calendar类则会根据系统的日历来填充Date对象。java.util.Date是一个表示日期和时间的类,代表了系统特定的时间戳。它是按照UTC时间显示的,可以精确到毫秒,源码内部使用long类型进行时间的存储。我们要注意与java.sql.Date区分,后者是用在数据库中的类,且是按照本地时区显示的。Date对象表示的时间,其默认顺序是星期、月、日、小时、分、秒、年。

2401_84254530的博客 992

Java时间处理1----Date和Calendar方法探究(Java8以前)

前言 时间的处理在Java中会经常用到,Java中常用的时间处理类有如下两种: Date: 日期类 用来表示瞬时时间,精确到毫秒,他表示的是某一刹那的时间。Date不存在时区概念。 由于Date类不易于实现国际化,所以逐渐不被推荐使用,并且废弃了大部分方法。 Calendar: 日历类,可以理解为计算机历 一方面是为了弥补Date的国际化缺陷,另一方面是将时间以日历的形式来表示和处理 Calendar包含时区和语言的概念 Calendar将时间细分成了年月日时分秒毫秒上午下午夏时令等概念,并提供这

LarsCheng's Blog 681

java--Data,LocalDate,LocalDateTime介绍和互相转换

Java 中处理时间的类型Date有更新 基本概念  时刻:所有计算机系统内部都用一个整数表示时刻,这个整数是距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数,可以理解时刻就是绝对时间,它与时区无关,不同时区对同一时刻的解读,即年月日时分秒是不一样的;   时区:同一时刻,世界上各个地区的时间可能是不一样的,具体时间与时区有关,一共有24个时区,英国格林尼治是0时区,北京是东八区,...

weixin_42981168的博客 7916

Java成神之路(十八)时间API

时间 时区、冬令时和夏令时、时间戳 1986年-1991年,存在夏令时,时间拨快一个小时。 时间戳:距离历史上一个标准参照时间经历过的毫秒数。绝对值,无关夏令时等。 标准时间:1970-01-01 00:00:00;2001-01-01 00:00:00(苹果) 格威林治时间,CET,UTC,GMT,CST 格威林治时间:世界时,本初字母线的标界线的时间。 GMT:格威林治时间 UTC:协调世...

love Simple的博客 230

Java时间类浅析

Java关于时间的类有Date, Calendar, TimeZone和DateFormat,Date类表示时间的格式;Calendar类实现了对时间的处理;TimeZone是时区类,表示各个地区不同的时间规定(夏令时等);DateFormat类用于格式化时间的显示。

calkee的专栏 1773

java Timestamp has neither date nor time

给大家整理了一些有关【Java,IT】的项目学习资料(附讲解~~):https://edu.51cto.com/course/35714.htmlhttps://edu.51cto.com/course/27963.html以一些关于【业务逻辑】的学习资料和大家一起分享一下:https://edu.51cto.com...

weixin_41031304的博客 174

使用Joda-Time优雅的处理日期时间

在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Tim...

哲洛不闹的专栏 366

Java学习笔记(下)

注解 元注解:定义其他注解的注解,@Target(表示该注解可以用于什么地方)、@Retention(表示在什么级别保存该注解)、@Documented(将此注解包含在javadoc中)、@Inherited(允许子类继承父类中的注解) 自定义注解:除了元注解都是自定义注解。 java中常用注解: @Override:表示当前方法覆盖父类中的方法 @Deprecation:表示方法已过时,方法会被加上删除线,使用时会有警告 @SuppressWarnings:表示关闭一些警告,SafeVarar

gpy1240301202的博客 212
上一篇: Java中枚举类概念说明
下一篇: 函数式接口Predicate中and函数分析
try_learner
博客等级 码龄9年 35粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值