Java的日期与时间(一)简述

来源:互联网 发布:动态规划是优化 编辑:程序博客网 时间:2024/05/16 05:09

Java的日期与时间

原文链接
作者:Jakob Jenkov
译者:阿为
目录:http://blog.csdn.net/tjgykhulj/article/details/68952451
所有译者备注将以此形式出现,删除线表示有争议或不明确的地方


一、简述

Java中提供的日期和时间功能,实在让人非常头疼。因此我将Java中日期与时间类放在一起,做了一个小小的教程,希望能帮助大家对这些功能有一个大致的了解,并理清一些容易混淆的点。
当然,这些Java的日期时间类在Java 8中已经更新了,引入了一套全新的类。但别担心,这个教程同时包含了Java 8的新功能与Java 7的老功能。

1. Java 8中提供的新功能

(若不关心JDK8中新功能,可跳过此部分)
在Java 8中增加了新的时间类,位于java.time包下,是Java 8标准类库(安装 时即有的)的一个。

在Java 8中,时间类最大的改变是,某个日期与时间不再表示为自1970.01.01到那时所经过的毫秒数,而是用秒来计数,这个数字可以为正也可以为负,是一个long类型。而在秒之外还有一个元素表示纳秒,使用是一个int类型的正整数来表示。你会发现这种在Java新提供的java.time中充斥着这种新的表示方法。

java.time包下还包含有一些包,来提供更多的方便,如:java.time.chrono中提供了对日本、泰国、台湾和伊斯兰的日历支持;java.time.format包下提供了parse和format的功能,方便时间类和字符串之间的换。

Java8中的时间核心功能如下:

类 描述 Instant 表示时间线上的某一时刻。在Java 7中一个时间点,通常是表达为“1970年初到这个时间点一共经过了多少毫秒”,而在Java 8中Instant类中,描述不变,只是单位变成了纳秒。 Duration 表达一段时间,可以说Duration是两个Instant之间的时间差,也可以说Instant是1970年初到这个时间点的Duration。 LocalDate 用于表示一个无时区的日期,比如生日、节日等等。 LocalDateTime 同上,无时区的日期与时间 LocalTime 同上,无时区的时间 TemporalAdjuster 无 ZonedDateTime 表示一个包含时区的日期与时间(如北京时间2017.04.02 8:00) Period 无 DateTimeFormatter 负责将时间Object转为字符串,如ZonedDateTime 和LocalDateTime对象。

2. Java 7中提供的日期时间功能:

Java 7中包含下表中列出的类与方法,每个类会在后续的小节中详细解释:

类与方法 描述 System.currentTimeMillis() 一个静态方法,返回当前日期时间(从1970年初到当前时间,经过了多少毫秒) java.util.Date 用于表示日期和时间的类,大多数里头的方法已经不推荐使用了(deprecated). java.sql.Date 用于表示日期的类,所有时间信息全被砍掉了,一般在数据库连接时使用 java.sql.Timestamp 同上,只是保留了时间信息。 java.util.Calendar 一个Calendar的基本类,可以对日期和时间进行操作,如加一天、一月、一年等等。 java.util.GregorianCalendar java.util.Calendar的一个子类,表示使用Gregorian日历(西方大多数国家使用的日历),实现了java.util.Calendar的全部方法。 java.util.TimeZone 用于表达时区的类,当跨时区进行Calendar操作时很有用。 java.text.SimpleDateFormat 帮助把字符串解析为Date的类,同时也可将Date格式化为字符串。

使用上述的哪些类呢?这要取决于你要做什么。

  • 若只需要记时,System.currentTimeMillis()就很足够了。
    若需要一个Object来存时间,作为一个属性,java.util.Date可以满足所有要求。
  • 若需要在数据库读写时间,可以用java.sql.Date或java.sql.Timestamp。
  • 若你需要计算日期,像是加一天,检查是否周末,或切换时区,使用java.util.Calendar和java.util.GregorianCalendar类。

以上列表中的条目,都附有链接,点击后可查看详细介绍。以上。
(由于尚未翻译完,有些条目点击后将跳转至原英文网站)


下一章:System.currentTimeMillis()

0 0
原创粉丝点击