原文链接 作者:Jakob Jenkov  译者:魏嘉鹏

目录

  • Java 8 Date Time API
  • Java 7 Date Time API

当你初次尝试弄明白怎么去使用Java的date time 的API的时候,那是相当令人困惑的。Therefore I have put together this little trail on Java’s date and time classes。希望这会让你对Java’的date类和time类有个总体的认识。我也希望这能消除一些Sun所制造的关于Java中许多date和time类的困惑。
实际上,在Java8中,随着一整套新的类的引入,旧有的date time API已经发生了改变(清除)。这个教程将会一起解释Java8和Java7的date time API.

Java 8 Date Time API

在Java8中,加入了一个全新的date time API。这个API在Java8标准类库中的java.time包。
Java8中date time API最主要的改变是日期和时间不再表示为从1970年1月1日到现在为止的总毫秒数,而是总秒数和总纳秒数。总秒数可以是正的也可以是负的以及它由long类型来表示。总纳秒数永远是正的以及它由int类型来表示。你将会在新的Java date time API 的许多类中看到这种新的日期和时间表现形式。
Java.time 包中也包含了一套子类,这些子类包含了更多的实用工具等。举个例子,java.time.chrono包中包含了一些处理日本、泰国、台湾和伊斯兰日历的对象类。Java.time.format包中包含了用于转换strings到dates和格式化 dates 到 strings。

Java8 中date time API核心由以下这些类组成:

Instant 表示时间线上的一个瞬间。在Java7的date time API中,一个瞬间通常由从1970年1月1日到现在的总毫秒数来表示。在Java8中Instant类代表着时间线上的一个瞬间,这个瞬间由从1970年1月1日到现在的总秒数和总纳秒数来表示。
Duration 表示持续的时间,比如在两个瞬间之间的时间。和Instant类一样,Duration将这个时间表示为总秒数和总纳秒数。
LocalDate 表示不带时区信息的日期-比如生日日期、官方节日等。
LocalDateTime 表示不带时区信息的日期时间。
LocalTime 表示不带时区信息的当地时间。
TemporalAdjuster 译者注:原文这里为空白)
ZonedDateTime 表示携带时区信息的日期时间
Period 译者注:原文这里为空白)
DateTimeFormatter 将date time对象格式化为字符串。比如zonedDateTime或者LocalDateTime。

Java 7 Date Time API

Java7有以下日期时间的类和方法。后面我会在每一个类的各自的页面介绍他们。

System.currentTimeMillis() 将从1970年1月1日到当前时间的总毫秒数返回的静态方法。
java.util.Date 表示日期和时间的类,其中大部分方法已被弃用。
java.sql.Date 表示日期的类。去除了所有时间信息。该类由JDBC所使用。
java.sql.Timestamp 表示日期和时间的类。该类由JDBC所使用。
java.util.Calendar 一些Calendar类的基类,拥有着计算日期和时间的方法,比如在另一个日期上添加一天或者一个月。
java.util.GregorianCalendar java.util.Calendar的一个具体子类,表示在当今西方普遍使用的公历。拥有着来自于 java.util.Calendar所有计算日期和时间的方法。
java.util.TimeZone Java TimeZone类表示时区,在跨时区的日历计算很有用。
java.text.SimpleDateFormat 该类可以帮助你转换strings到dates和格式化 dates 到 strings。

那么,哪些类是你应该使用的呢?这个取决于你将要做什么。
如果你只是做一些简单的时间设置,那么System.currentTimeMillis()就足矣。
如果你只是需要一个能够装载日期的对象,比如作为一个简单的域模型对象的属性,那么你可以使用java.util.Date 类。
如果你只是需要读取和写入日期时间到数据库,那么使用java.sql.Date 类和java.sql.Timestamp类。
如果你只是需要做一些日期计算,比如在另一个日期添加一些天数或者月数、检查给定的日期是一周中的第几天(周一、周二等)、在时区之间转换日期和时间,那么使用java.util.Calendar类和java.util.GregorianCalendar 类。
这里有一个Java date 和time 教程的列表,方便你快速导航(译者注:目前还没有翻译完,会尽快补全):

  • Java Date Time 教程
  • Java Date Time 教程-System.currentTimeMillis()
  • Java Date Time 教程-时间测量
  • Java Date Time 教程-java.util.Date
  • Java Date Time教程-Java.sql.Date
  • Java Date Time 教程-java.sql.Timestamp
  • Java Date Time 教程-java.util.Calendar和GregorianCalendar
  • Java’s java.util.TimeZone
  • Parsing and Formatting Dates in Java
  • Java Instant
  • Java Duration
  • Java LocalDate
  • Java LocalTime
  • Java LocalDateTime
  • Java ZonedDateTime
  • Java DateTimeFormatter

(全文完)

Java Date Time 教程相关推荐

  1. Java Date Time 教程-java.sql.Date

    Java的java.sql.Date类在JDBC API中被使用.如果你需要在java.sql.PreparedStatement上设置日期或者从java.sql.ResultSet获取日期,你将会和 ...

  2. Java Date Time 教程-java.sql.Timestamp

    Java的java.sql.Timestamp类在JDBC API中被使用.如果你需要在java.sql.PreparedStatement上设置日期+时间或者从java.sql.ResultSet获 ...

  3. Java Date Time 教程-System.currentTimeMillis()

    原文链接 作者:Jakob Jenkov  译者:魏嘉鹏 静态方法System.currentTimeMillis() 返回从1970年1月1日到现在的总毫秒数.返回类型为long.下面是一个例子: ...

  4. Java Date Time 教程-时间测量

    为什么80%的码农都做不了架构师?>>>    在Java中,用System.currentTimeMillis()来测量时间最方便. 你要做的是在某些操作之前获取到时间,然后在这些 ...

  5. Windows下Libvirt Java API使用教程(二)- 接口使用说明

    介绍完libvirt Java API的部署工作: <Windows下Libvirt Java API使用教程(一)- 开发环境部署> 接下来我们就介绍一下接口的使用和代码样例. libv ...

  6. Java Servlet完全教程

    本文来自Java Servlet完全教程 Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广 ...

  7. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  8. Java 8功能教程– ULTIMATE指南(PDF下载)

    编者注:在本文中,我们提供了全面的Java 8功能教程. 自Java 8公开发布以来已经有一段时间了,所有迹象都表明这是一个非常重要的版本. 我们在Java Code Geeks处提供了大量教程,例如 ...

  9. java不完全教程附编码示例

    Java不完全教程第一章Java预备知识常用DOS命令help,dir,md,cd,rd,del,copy,move,start,type,cls,attrib配置环境变量JAVA_HOME C:\s ...

最新文章

  1. 手把手教线性回归分析(附R语言实例)
  2. TCP之三次握手四次挥手
  3. log4j.properties中的这句话“log4j.logger.org.hibernate.SQL=DEBUG ”该怎么写在log4j.xml里面呢?...
  4. mxnet基础到提高(21)-配置mxnet并运行第一个C++程序
  5. 开辟经济发展的第二战场
  6. 数据结构---队列C语言实现
  7. oracle的scn增量备份,【Oracle】基于SCN的增量备份修复DataGuard GAP
  8. 如何更改Docker默认的images存储位置
  9. CSDN挑战编程——《绝对值最小》
  10. matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件
  11. (Navicat for MySQL)利用可视化软件navicat操作mysql,创建一个表举例(基础)
  12. java自行车火多重,多重继承的演变
  13. 带格式粘贴至html富文本,防止复制/粘贴将网页样式复制到富文本编辑器
  14. Glib2之定义手册(十八)
  15. Spark StructType 类型详解
  16. 编码Ascii;unicode; utf-8;utf-16;utf-32;gb2312;gbk
  17. spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群...
  18. psp记忆棒测试软件,psp记忆棒修复工具
  19. TCP/IP、HTTP、HTTPS
  20. 推荐Ubuntu使用UML工具-Drawio

热门文章

  1. DateUtils常用方法
  2. matplotlib学习记录 四
  3. windows上使用的免费连接linux终端xshell6,xftp6下载
  4. MariaDB mysql 比较区别 选择
  5. 使用 Async 和 Await 的异步编程
  6. Ubuntu下MySQL忘记root密码重置
  7. 编译安装 openswan-2.6.34
  8. [Python] MySQLdb(即 MySQL-python 包)在 OS X 中安装指南
  9. BITMAPINFO结构
  10. Phython—实训day5—爬虫相关知识