您的位置 首页 java

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的方法已经不多了,主要包括:

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示例代码

文章来源:智云一二三科技

文章标题:Java中关于时间的那些处理方法

文章地址:https://www.zhihuclub.com/176242.shtml

关于作者: 智云科技

热门文章

网站地图