java 日期时间处理大全(Java中关于时间的那些处理方法)
java 日期时间处理大全(Java中关于时间的那些处理方法)出去哪些过时的方法以后,Date类剩余的public的方法已经不多了,主要包括:Date类的构造方法通过该方法可以获取到当前的Unix时间戳,与时区无关。Date类关系图Date有很多个构造方法,但是只有两个构造方法是推荐使用的,其它方法都是标注Deprecated的。
相关概念-
时区。时区是地球上的区域使用同一个时间定义。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。世界各个国家位于地球不同位置上,因此不同国家的日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
-
UTC。协调世界时,又称世界标准时间或世界协调时间,简称UTC,是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
-
Unix Time。Unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
时区
System.currentTimeMillis通过该方法可以获取到当前的Unix时间戳,与时区无关。
Date类关系图
Date有很多个构造方法,但是只有两个构造方法是推荐使用的,其它方法都是标注Deprecated的。
Date类的构造方法
出去哪些过时的方法以后,Date类剩余的public的方法已经不多了,主要包括:
// 时间操作
getTime()
setTime(long time)
// 时间比较
before(Date when)
after(Date when)
compareTo(Date anotherDate)
Date类可以看作是对long类型的毫秒数进行简单操作的一个类,那些涉及到年、月、日、时、分、秒相关的方法全部被标注为过时的,这些功能现在都由Calendar类来提供了。
java.util.CalendarCalendar是一个抽象类,我们无法直接new一个Calendar对象,但是我们可以通过Calendar.getInstance()方法获取到一个Calendar对象。
getInstance具有不同参数的实现,我们可以指定时区和Locale信息。不管调用哪个getInstance,最终执行的都是createCalendar(TimeZone zone Locale aLocale)方法。在这个方法中会对Local进行一系列的判断,然后根据判断结果来具体实例化Calendar。一般情况下我们得到的都是GregorianCalendar的实例,(如果指定了JP类型的Local,就会得到JapaneseImperialCalendar的实例)。
GregorianCalendar类关系图
Calendar类提供丰富的年、月、日、时、分、秒、星期等内容的操作,通过它我们可以非常方便的计算这些数据。
java.util.TimeZoneJava中的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.SimplateDateFormatSimpleDateFormat 是一个时间格式化和解析的类。
SimplateDateFormat类关系图
SimplateDateFormat会把A--Z,a--z这些字母特殊处理替换为对应的日期时间,其他的字符串还是原样输出。具体的转移对照表如下图所示,也可以从SimplateDateFormat的源码中查看到。
转移字符对照表
下图展示了如何使用SimplateDateFormat进行格式化输出和解析:
SimplateDateFormat示例代码