基本的6种日期类

/**
* 六种时间类型的类
* 数据库格式的时间三种格式
*/
java.util.Date date = new java.util.Date();//年与日时分秒
//数据库的三种类都继承了java.util.Date,在除了数据库的情况下使用
java.sql.Date sDate = new java.sql.Date(date.getTime());//年月日
java.sql.Time sTime = new java.sql.Time(sDate.getTime());//时分秒
java.sql.Timestamp sTimeStamp = new java.sql.Timestamp(sTime.getTime());//年月日时分秒毫秒 //时间格式转换
java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //日历类是一个抽象基类
java.util.Calendar calender = Calendar.getInstance();// System.out.println(date);
System.out.println(sDate);
System.out.println(sTime);
System.out.println(sTimeStamp);
System.out.println(calender);

输出的日期格式:

Thu Mar 28 14:47:18 CST 2019
2019-03-28
14:47:18
2019-03-28 14:47:18.162
java.util.GregorianCalendar[time=1553755638277,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Asia/Shanghai”,offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=2,WEEK_OF_YEAR=13,WEEK_OF_MONTH=5,DAY_OF_MONTH=28,DAY_OF_YEAR=87,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=47,SECOND=18,MILLISECOND=277,ZONE_OFFSET=28800000,DST_OFFSET=0]

由此可以看出几种类的时间格式有差异

类名称 时间格式
java.util.Date 年月日时分秒
java.sql.Date 年月日
java.sql.Time 时分秒
java.sql.Timestamp 年月日时分秒毫秒
java.util.Calendar 年月日时分秒毫秒
查询源码可知除过Calendar 类外其他的类都是继承java.util.Date类并且屏蔽了相关时间精度,重写了toString()方法。
但是都属于同一父类的继承可以进行相互转换,getTime()方法获取当前时间的秒数还是没有进行重写,获得时间秒数都是一样 (Timestamp除外,Timestamp重写了getTime添加了毫秒数)
对于基础以上的java.util.Date的继承类来说,都会存在一个问题,那就是对于许多方法都已经废弃掉,java提供了Calendar 和 SimpleDateFormat 来支持时间日期的更方便操作。

Calendar
Java.util.Calendar区别与java.util.Date的几个地方也需要注意一下 :

首先,Calendar增加了毫秒的时间段,通过它可以获取时间点的毫秒值,而java.util.Date只是精确到秒。
其次,Calendar过去年的时候是当前年份比如:2010,而Date获取年份的时获取到的是当前年份-1900的一个值(2010-1900=110,因此,你调用getYear后过去的值就是110)。
Calendar是一个抽象类,之所以能够实例化,是因为此处的Calendar充当了一个类似于工厂的作用,在getInstance方法中实例化了Calendar子类GregorianCalendar,并把它返回给用户使用。
两个类是可以进行相互转换的可以使用Calendar类的setTime(Date date)方法可以转换,获取Date队形可以getTime()方法可以转换成Date对象

/** Calendar.class**/
/**
* Returns a <code>Date</code> object representing this
* <code>Calendar</code>'s time value (millisecond offset from the <a
* href="#Epoch">Epoch</a>").
*
* @return a <code>Date</code> representing the time value.
* @see #setTime(Date)
* @see #getTimeInMillis()
*/
public final Date getTime() {
return new Date(getTimeInMillis());
} /**
* Sets this Calendar's time with the given <code>Date</code>.
* <p>
* Note: Calling <code>setTime()</code> with
* <code>Date(Long.MAX_VALUE)</code> or <code>Date(Long.MIN_VALUE)</code>
* may yield incorrect field values from <code>get()</code>.
*
* @param date the given Date.
* @see #getTime()
* @see #setTimeInMillis(long)
*/
public final void setTime(Date date) {
setTimeInMillis(date.getTime());
}

Calendar和Date可以及逆行转换,也就打通了过时时间类的使用具体的方法还需要多加练习

SimpleDateFormat 日期格式转换

主要使用的是SimpleDateFormat 类的日期格式转换和日期字符串解析成日期对象
*接上述代码

//时间格式转换
java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("格式转换后:");
//类型转换参数是Date类型,返回值只是 一个字符串
System.out.println(dateFormat.format(date));
System.out.println(dateFormat.format(sDate));
System.out.println(dateFormat.format(sTime));
System.out.println(dateFormat.format(sTimeStamp));
System.out.println(dateFormat.format(calender.getTime()));

格式转换后:
2019-03-28 02:47:18
2019-03-28 02:47:18
2019-03-28 02:47:18
2019-03-28 02:47:18
2019-03-28 02:47:18

//时间格式的解析
//日期字符转换成日期对象
//首先进行字符串模式的规定
java.text.SimpleDateFormat dateFormat1 = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//进行字符串的解析,都会解析成Date基类(会产生解析异常)
java.util.Date date1 = dateFormat1.parse("2020-12-12 12:20:01");
System.out.println(date1);

Sat Dec 12 00:20:01 CST 2020

时间格式的解析,如果时间格式不符合会出现ParseException异常

/**
* Parses text from the beginning of the given string to produce a date.
* The method may not use the entire text of the given string.
* <p>
* See the {@link #parse(String, ParsePosition)} method for more information
* on date parsing.
*
* @param source A <code>String</code> whose beginning should be parsed.
* @return A <code>Date</code> parsed from the string.
* @exception ParseException if the beginning of the specified string
* cannot be parsed.
*/
public Date parse(String source) throws ParseException
{
ParsePosition pos = new ParsePosition(0);
Date result = parse(source, pos);
if (pos.index == 0)
throw new ParseException("Unparseable date: \"" + source + "\"" ,
pos.errorIndex);
return result;
}

这些时间格式我们应该如何使用
对于现在的日期格式,只要我们几乎都是可以像话转换和借助格式化类行进操作的,具体的到底使用什么类型还是需要看业务需要

==针对不同的数据库选用不同的日期类型 ==
  Oracle的Date类型,只需要年月日,选择使用java.sql.Date类型
  MS Sqlserver数据库的DateTime类型,需要年月日时分秒,选择java.sql.Timestamp类型

oracle数据库提供的todate()和tochar()函数也可以进行日期格式的转换,所以我们使用的时候最好对日期格式进行格式进行统一转换
可以参考博客(对于不同数据库的日期格式的使用)

Java多线程编程中使用DateFormat类

全网最权威Java8日期时间类详解

java 日期相关类的学习和多线程下的日期格式化使用

Java常用类:关于日期、时间的常用类

JAVA中的六种日期类型使用的更多相关文章

  1. Java中String转换Double类型 Java小数点后留两位

    Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.to ...

  2. Java中的时间日期处理

    程序就是输入——>处理——>输出.对数据的处理是程序员需要着重注意的地方,快速.高效的对数据进行处理时我们的追求.其中,时间日期的处理又尤为重要和平凡,此次,我将把Java中的时间日期处理 ...

  3. Java中Date()类 日期转字符串、字符串转日期的问题(已解决)

    Java中Date()类 日期转字符串.字符串转日期的问题 今天在写东西的时候突然发现一个问题,就是先new 一个Date()然后将生成的值转为字符串, 然后再将转换后的字符串再次用new Date( ...

  4. Java 中要将 String 类型转化为 int 类型

    在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. 例1: 1 2 3 4 5 6 S ...

  5. 在JAVA中怎么比较Double类型数据的大小

    在JAVA中怎么比较Double类型数据的大小  我来答  浏览 33044 次   3个回答 #活动# “双11”答题活动,奖励加码!最高得2000元购物礼金! pollutedair 2015- ...

  6. Java中的操作日期的工具类

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  7. Java 中的时间日期 API

    自从 14 年发布 Java 8 以后,我们古老 java.util.Date 终于不再是我们 Java 里操作日期时间的唯一的选择. 其实 Java 里的日期时间的相关 API 一直为世猿诟病,不仅 ...

  8. Java中包装类型和基本类型的使用场景(什么时候使用包装类型)(转)

    说明:最简单的理解,基本类型有默认值,而包装类型初始为null.然后再根据这两个特性进行分业务使用,在阿里巴巴的规范里所有的POJO类必须使用包装类型,而在本地变量推荐使用基本类型. Java语言提供 ...

  9. java 中的resultset的类型

    结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据 ...

随机推荐

  1. python的分支结构

    python分支结构 if结构 python的 if 选择分支结构的基础语法如下,需要注意的是判断条件后面是半角的分号,它的作用相当于Java中的小括号 if 判断条件 : 代码块 elif 判断条件 ...

  2. python解释器的下载与安装

    python解释器 1. 什么是python解释器 用一种能让电脑听的懂得语言,使得电脑可以听从人们的指令去进行工作(翻译官) Python解释器本身也是个程序, 它是解释执行Python代码的,所以 ...

  3. SpringCloud 2020.0.4 系列之 Bus

    1. 概述 老话说的好:会休息的人才更会工作,身体是革命的本钱,身体垮了,就无法再工作了. 言归正传,之前我们聊了 SpringCloud 的 分布式配置中心 Config,文章里我们聊了config ...

  4. IDM使用教程:利用IDM下载百度网盘文件

    IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...

  5. SpringCloud升级之路2020.0.x版-29.Spring Cloud OpenFeign 的解析(1)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在使用云原生的很多微服务中,比较小规模的可能直接依靠云服务中的负载均衡器进行内部域名与服务 ...

  6. IDEA常用优化设置

    1.设置鼠标悬浮提示 Editor->General 这里要勾选下,后面设置的是延迟时间 默认半秒:设置后,我们鼠标移动到类上看看: 2.显示方法分隔符 Editor->General - ...

  7. (五)MySQL函数

    5.1  常用函数 5.2  聚合函数(常用) 函数名称 描述 COUNT() 计数 SUM() 求和 AVG() 平均值 MAX() 最大值 MIN() 最小值 ....   ....   想查询一 ...

  8. Java学习(十四)

    玩云顶连跪一晚上,搞得心态有点崩了... 源计划5-4还是一星vn,吐了. 今天学习了伪元素: 语法是 :first-letter//元素的第一个字母的位置,如果:前不加元素,默认是#(即所有元素) ...

  9. Github webhooks 自动部署博客文章,使用总结【含视频】

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/VtTHUfyiITNSoGy052jkXQ 沉淀.分享.成长,让自己和他人都能 ...

  10. 最强最全面的Hive SQL开发指南,超四万字全面解析

    本文整体分为两部分,第一部分是简写,如果能看懂会用,就直接从此部分查,方便快捷,如果不是很理解此SQL的用法,则查看第二部分,是详细说明,当然第二部分语句也会更全一些! 第一部分: hive模糊搜索表 ...