Java的Date和Time入门教程
本文是一篇翻译文章,已取得原作者授权,原文地址是http://tutorials.jenkov.com/java-date-time/index.html
Java语言的JDK中关于日期和时间的API设计的不是很好,类之间的职责划分不是很清晰,初学者很可能会搞不清楚这些类的使用方法和适用场景。本教程将尝试帮助大家了解和认识一下JDK中的日期和时间相关的类,希望可以帮助大家减少对它们的误解和误用。
实际上,在JDK8中引入了一套新的用于处理日期和时间的API。本教程将会覆盖和讲解JDK7和JDK8两套日期和时间相关的API。
JDK8中的Date和Time类
  JDK8中新引入的日期和时间API位于 java.time 包中。我们知道在JDK7中日期和时间API中,使用一个long类型的变量(可正可负)统计从1970年1月1日零点零分开始计数直到当前所经过的毫秒数。在JDK8中,时间的计数开始时间同样是1970年1月1日零点零分,不过,这次采用了一个记录秒数的long类型的变量(可正可负)加上一个记录纳秒数的int类型的变量(只能是正数)一起来表示时间。稍后,我们可以看到新的JDK8中的API是如何使用这两个变量的。
  我们注意到,在 java.time 包的下面含有子包,这些子包中含有一些很有用的工具类。比如:java.time.chrono 包包含有处理日本、台湾等国家和地区日历的工具类; java.time.format 包含有的类可以用来在日期、时间与字符串之间做解析和格式化的工作。
  我们先来看一下JDK8中关于日期和时间的核心类有哪些?
Instant :代表时间线上的一个时间点,内部使用秒数和纳秒数
Duration :代表一段时间,两个Instant时间点之间的时间差,内部使用秒数和纳秒数
LocalDate :代表不含有时区信息的日期
LocalDateTime :代表不含有时区信息的日期时间
LocalTime :代表不含有时区信息的时间
ZonedDateTime:代表含有时区信息的日期时间
DateTimeFormatter:用于日期或时间到字符串的格式化转换
JDK7中的Date和Time类
正如前文所提,JDK7中,是使用一个long类型的变量(可正可负)统计从1970年1月1日零点零分开始计数直到当前所经过的毫秒数。我们也看一下JDK7中的关于日期和时间的核心类有哪些?
System.currentTimeMillis() :一个返回代表当前日期和时间的毫秒数的静态方法
java.util.Date:代表日期和时间的类,类中的大部分方法已过期
java.sql.Date:代表日期的类,用于JDBC中
java.sql.Timestamp:代表日期和时间的类,用于JDBC中
java.util.Calendar:日历的基类,含有大量操作日期和时间的方法
java.util.GregorianCalendar:一个日历的具体类,代表最常使用的公历日历,是Calendar的一个子类
java.util.TimeZone:代表时区的概念,帮助处理日历的跨时区问题
java.text.SimpleDateFormat:帮助处理日期、时间与字符串之间的转换
  正如你所看到的,JDK7中的日期和时间相关API的设计很不友好,多个类的之间的职责不清晰,有重叠区域存在。在实际的使用过程中,具体该使用哪个类,取决于你的具体需求。如果是很非常简单的时间记录,使用System.currentTimeMills() 就可以啦。如果你只是需要一个对象来记录一个时间值,直接使用 java.util.Date 就好。如果你需要和数据库中的日期、时间值打交道,你需要使用 java.sql.Date 或者 java.sql.Timestamp 。如果你需要对日期、时间进行一些算数上的处理,那么使用java.util.Calendar 或者 java.util.GregorianCalendar会是一个好的选择。
  本文对JDK7和JDK8中的日期、时间相关的API进行了一个大概的介绍,先让大家对整体的设计有基本的认识。接下来的教程会相对深入到具体的类和使用场景中。
本系列文档会在本人的微信公众号发布,欢迎大家扫码关注。
                
Java的Date和Time入门教程的更多相关文章
- JVM,Java虚拟机基础知识新手入门教程(超级通熟易懂)
		
作者:请叫我红领巾,转载请注明出处http://www.cnblogs.com/xxzhuang/p/7453746.html,简书地址:http://www.jianshu.com/p/b963b3 ...
 - spring boot入门教程——Spring Boot快速入门指南
		
Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...
 - java springboot整合zookeeper入门教程(增删改查)
		
java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...
 - (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
		
http://blog.csdn.net/zixiao217/article/details/53044890 读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序, ...
 - Mybatis入门教程之新增、更新、删除功能_java - JAVA
		
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 上一节说了Mybatis的框架搭建和简单查询,这次我们来说一说用Mybatis进行基本的增删改操作: 一. 插入一条数据 ...
 - JMS(Java消息服务)入门教程
		
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
 - Java入门教程总目录
		
Java入门教程总目录 持续更新中... 1.Java常识汇总 2.Java框架对比 3.Java技术路线 4.Java编码规范 5.Java环境变量配置 6.枚举 7.操作符 12.定时任务
 - Java 图片处理解决方案:ImageMagick 快速入门教程
		
文章首发于[博客园-陈树义],点击跳转到原文Java 图片处理解决方案:ImageMagick 快速入门教程. ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件 ...
 - Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis
		
https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...
 
随机推荐
- 简单加解密算法 - vb.net
			
Public Class Form1 Dim charAarray() As Char '加密 Private Sub Btn_En_Click(sender As System.O ...
 - 如何利用jquery 实现表格数据的搜索功能
			
在表格的操作中,常常会遇到通过关键字来搜索结果,这个功能用jquery的filter实现非常简单. 我以一个小例子说明: <table> <thead> <tr cols ...
 - Ubuntu 16.04安装配置Samba服务
			
Samba是开源软件,用来让Linux系统与Windows系统的SMB/CIFS网络协定做连结,实现Windows主机与Linux服务器之间的资源共享.Samba服务为两种不同的操作系统架起了一座桥梁 ...
 - Code forces 719A Vitya in the Countryside
			
A. Vitya in the Countryside time limit per test:1 second memory limit per test:256 megabytes input:s ...
 - salesforce 零基础学习(六十六)VF页面应善于使用变量和函数(二)常用函数的使用
			
上一篇介绍VF中常用的变量,此篇主要内容为VF页面可以直接使用的函数,主要包括Date相关函数,Text相关函数,Information相关函数以及logic相关函数,其他相关函数,比如math相关函 ...
 - didReceiveMemoryWarning-内存警告处理方法-iOS
			
前言 当app出现内存警告的时候会怎么办 正文 ios6.0之后,内存警告的viewDidUnload 被屏蔽,即又回到了ios3.0的时期的内存管理方式. iOS6.0及以上版本的内存警告:调用di ...
 - 响应者链-----iOS
			
正文 以触摸事件为例,说一下响应者链 当发生触摸事件后,Runloop监听到事件,会将其事件打包成一个UIEvent事件,并放入当前活动UIApplication的事件队列中,再会传给UIWindow ...
 - 转:微信生成二维码java
			
package com.wepayweb.weixin.util.device; /*** * V型知识库 www.vxzsk.com */ import java.io.BufferedReader ...
 - 利用AForge.NET 调用电脑摄像头进行拍照
			
当然了,你需要去官网下载类库,http://www.aforgenet.com/ 调用本机摄像头常用的组件: AForge AForge.Controls AForge.Imaging AForge. ...
 - BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏(最短路)
			
这个= =一看就是最短路了= = PS:最近有点懒 = = 刚才看到一道平衡树的裸题还嫌懒不去写= =算了等刷完这堆水题再去理= = CODE: #include<cstdio>#incl ...