• JAVA中的六种日期类型使用


    基本的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常用类:关于日期、时间的常用类

  • 相关阅读:
    STL与泛型编程-练习2-GeekBand
    HashSet
    JAVA集合
    分布式锁1 Java常用技术方案
    JAVA 锁
    JAVA多线程二
    JAVA多线程一
    Redis pipeline and list
    mongo 安装
    Intersection of Two Arrays
  • 原文地址:https://www.cnblogs.com/edda/p/14588206.html
Copyright © 2020-2023  润新知