网站首页 > java教程 正文
相关概念
时区。时区是地球上的区域使用同一个时间定义。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。世界各个国家位于地球不同位置上,因此不同国家的日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
UTC。协调世界时,又称世界标准时间或世界协调时间,简称UTC,是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
Unix Time。Unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
时区
System.currentTimeMillis
通过该方法可以获取到当前的Unix时间戳,与时区无关。
获取当前时间戳
java.util.Date
Date是Java中用来精确定义时间的类,它能够精确到毫秒级别。Date是一个非常古老的类,它从JDK 1.0开始就已经存在。正是由于Date是一个非常古老的类,在这个类中存在许多标注为Deprecated的方法,这些方法是被废弃的,虽然我们仍然可以使用,但是非常非常不建议使用他们。
Date类关系图
Date有很多个构造方法,但是只有两个构造方法是推荐使用的,其它方法都是标注Deprecated的。
Date类的构造方法
出去哪些过时的方法以后,Date类剩余的public的方法已经不多了,主要包括:
// 时间操作
getTime()
setTime(long time)
// 时间比较
before(Date when)
after(Date when)
compareTo(Date anotherDate)
Date类可以看作是对long类型的毫秒数进行简单操作的一个类,那些涉及到年、月、日、时、分、秒相关的方法全部被标注为过时的,这些功能现在都由Calendar类来提供了。
java.util.Calendar
Calendar是一个抽象类,我们无法直接new一个Calendar对象,但是我们可以通过Calendar.getInstance()方法获取到一个Calendar对象。
getInstance具有不同参数的实现,我们可以指定时区和Locale信息。不管调用哪个getInstance,最终执行的都是createCalendar(TimeZone zone,Locale aLocale)方法。在这个方法中会对Local进行一系列的判断,然后根据判断结果来具体实例化Calendar。一般情况下我们得到的都是GregorianCalendar的实例,(如果指定了JP类型的Local,就会得到JapaneseImperialCalendar的实例)。
GregorianCalendar类关系图
Calendar类提供丰富的年、月、日、时、分、秒、星期等内容的操作,通过它我们可以非常方便的计算这些数据。
java.util.TimeZone
Java中的java.util.TimeZone类用于表达时区,当你进行跨时区的java.util.Calendar的计算时,可以尝试使用java.util.TimeZone来连接不同时区的calendar。
TimeZone样例
上图展示了两种获取TimeZone实例的方法,getDefault可以获取到当前时区的TimeZone实例,而getTimeZone则可以指定具体的时区。
通过console的输出日志我们可以看到,TimeZone中包含了关于时区的众多内容,其中最为关键的就是时差(offset)。在TimeZone中时差表示为以毫秒为单位的一个long类型数字,比如栋八区就是8*3600*1000 = 28800000
java.text.SimplateDateFormat
SimpleDateFormat 是一个时间格式化和解析的类。
SimplateDateFormat类关系图
SimplateDateFormat会把A--Z,a--z这些字母特殊处理替换为对应的日期时间,其他的字符串还是原样输出。具体的转移对照表如下图所示,也可以从SimplateDateFormat的源码中查看到。
转移字符对照表
下图展示了如何使用SimplateDateFormat进行格式化输出和解析:
SimplateDateFormat示例代码
猜你喜欢
- 2024-09-27 Java日期时间工具类(java 日期类)
- 2024-09-27 JAVA中计算两个日期时间的差值竟然也有这么多门道
- 2024-09-27 一个MySQL时间戳精度引发的血案(mysql时间戳字段)
- 2024-09-27 前端大佬问我MySQL怎么查询最近10分钟的数据?我是这么回答他的
- 2024-09-27 如何将ABAP时间戳转换为JAVA时间戳,原理是什么呢?
- 2024-09-27 JAVA8时间工具类(java8时间工具类有哪些)
- 2024-09-27 Java中有哪些可以用于日期和时间的API?
- 2024-09-27 java的时间戳的长度为什么是固定的?它是如何做到的
- 2024-09-27 Java基于JWT的token认证(基于jwt的token验证)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)