美文网首页
java 日期相关Date、SimpleDateFormat、C

java 日期相关Date、SimpleDateFormat、C

作者: 夜希辰 | 来源:发表于2021-12-29 17:54 被阅读0次
    借的图片、美美哒~

    本篇文章主要摘录了4篇文章的内容,原文在文末
    在java中时间类主要有Date、Calendar、SimpleDateFormat,暂时只介绍 java.util.*下的时间类,对于java.sql.下的先不做介绍,文章比较长可以根据自己的需要看对应的内容。

    目录:
    一、Date类
    1.使用Date类代表当前系统时间
    2.使用Date类代表指定时间
    3.获取Date对象中的信息(年月日周)
    二、Calendar类
    1.使用Calendar类代表当前时间
    2.使用Calendar类代表指定的时间
    1)指定日期中,年月日
    2)指定日期年月日,中某个日期
    3.Calendar类常用方法
    案例:
    三、SimpleDateFormat类
    1.String 类型转化成Date
    2.Date类型转化成为String
    3.其它日期格式
    四、后记

    一、Date类

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。
    Date类中很多方法已经过时,使用Calendar来替代。

    常用方法有,

    long getTime()   //返回的时间是距离1970年的毫秒数
    
    void setTime(long time)
    
    1.使用Date类代表当前系统时间
    //创建一个代表系统当前日期的Date对象
    Date now = new Date();
    System.out.println(date);
    //Wed Dec 29 15:38:51 CST 2021
    

    使用Date类的默认构造方法创建出来的对象就代表当前的时间,由于Date类覆盖了toString()方法。所以可以直接输出Date类型的对象,显示的结果如下:Wed Dec 29 15:38:51 CST 2021

    2.使用Date类代表指定时间

    使用带参数的构造方法 Date(int year, int month, int day),可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900月份参数应该是实际需要代表的月份减去1以后的值

    //创建一个代表2021年6月12号的Date对象
    Date d1 = new Date(2021-1900, 6-1, 12); 
    
    3.获取Date对象中的信息(年月日周)
    如:
    Date d2 =  new Date(2014-1900, 6-1, 12);
    
     //获得年份 (注意年份要加上1900,这样才是日期对象d2所代表的年份)
    int year = d2.getYear() + 1900;
    //获得月份  (注意月份要加1,这样才是日期对象d2所代表的月份)
    int month = d2.getMonth() + 1;
    //获得日期
    int date = d2.getDate();
    
    //获得小时
    int hour = d2.getHours();//不设置默认为0
    //获得分钟
    int minute = d2.getMinutes();
    //获得秒
    int second = d2.getSeconds();
    
     //获得星期 (注意:0代表星期日、1代表星期1、2代表星期2,其他的一次类推了)
    int day = d2.getDay();
    

    使用Date类中的get方法。需要注意的是使用getYear获得的是Date对象中年份减去1900以后的值,所以需要显示对应的年份则需要在返回值的基础上加1900,月份类似。在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几Date类规定周日是0,周一是1,周二是2,后续的依次类推。

    二、Calendar类

    从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现(Date的一些方法都过时了)。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

    Calender类是一个抽象类,在实际使用时实现特定的子类的对象,使用getInstance()方法创建即可。

    1.使用Calendar类代表当前时间

    Calendar c = Calendar.getInstance();
    System.out.println(c);
     //结果: 
     //java.util.GregorianCalendar[time=1640766764310,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=2021,MONTH=11,WEEK_OF_YEAR=1,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=363,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=32,SECOND=44,MILLISECOND=310,ZONE_OFFSET=28800000,DST_OFFSET=0]
    
    

    返回的是一个Calendar对象,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

    使用该方法获得的Calendar对象代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

    2.使用Calendar类代表指定的时间

    1)指定日期中,年月日
    //获取获取系统的当前日历对象
    Calendar c1 = Calendar.getInstance();
    c1.set(2021,8-1,28);
    

    使用过Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后在设定该对象中的年月日参数来完成。set方法的声明为:public final void set(int year,int month,int date)

    以上示例代码设置的时间为2021年8月28日,其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值为实际的月份值减1日期的值就是实际的日期值。

    备注:看见另外一种方法指定日期:

    Calendar current = Calendar.getInstance();
    String strTime = "2000-03-05";
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(strTime);
    current.setTime(date);//将时间对象data设置为新的日历
    System.out.println("修改后的系统时间为:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(current.getTime()));
    
    
    2)指定日期年月日,中某个日期

    如果只设定某个字段某个字段,例如日期的值,则可以使用如下set方法:
    public void set(int field,int value),在该方法中,参数field代表要设置的字段的类型,常见类型如下:

    Calendar.YEAR 年份
    Calendar.MONTH 月份;
    Calendar.DATE 日期;当月的第几天
    Calendar.DAY_OF_MONTH 日期,和Calendar.DATE字段完全相同;
    Calendar.HOUR 12小时制的小时数;
    Calendar.HOUR_OF_DAY 24小时制的小时数;
    Calendar.MINUTE 分钟;
    Calendar.SECOND 秒;
    Calendar.DAY_OF_WEEK 星期几。
    Calendar c1 = Calendar.getInstance();
    System.out.println(c1.get(Calendar.YEAR) + "-" + c1.get(Calendar.MONTH) + "-" + c1.get(Calendar.DATE));
    //2021-11-29
    
    c1.set(Calendar.DATE,10);
    System.out.println("日期设置为10号后:" + c1.get(Calendar.YEAR) + "-" + c1.get(Calendar.MONTH) + "-" + c1.get(Calendar.DATE));
    //日期设置为10号后:2021-11-10
    

    该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。

    3.Calendar类常用方法

    方法 作用
    static Calendar getInstance() 使用默认时区和区域设置获取日历。通过该方法生成Calendar对象。如下所示:Calendar cr=Calendar.getInstance();
    public void set(int year,int month,int date,int hourofday,int minute,int second) 设置日历的年、月、日、时、分、秒。
    public int get(int field) 返回给定日历字段的值。所谓字段就是年、月、日等等。
    public void setTime(Date date) 使用给定的Date设置此日历的时间。Date------Calendar,重新设置时间
    public Date getTime() 返回一个Date表示此日历的时间。Calendar-----Date,格式:Sat Sep 08 10:10:10 CST 2012,返回一个Date时间
    abstract void add(int field,int amount) 该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少是amount的值为负。如下所示:Calendar c3 = Calendar.getInstance();c3.add(Calendar.DATE,100);--计算100天以后的时间
    public long getTimeInMillis() 以毫秒为单位返回该日历的时间值。返回毫秒值

    案例:

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class test {
        public static void main(String[] args) throws ParseException {
            //获 取获取系统的当前日历对象
            Calendar current = Calendar.getInstance();
    
            //1、获取今天是周几,在Calendar类中,周日是1,周一是2,周二是3,依次类推。
            int weekDay = current.get(Calendar.DAY_OF_WEEK);
            System.out.println("今天是周:" + (weekDay - 1));
    
            //2、获取系统当前年
            int year = current.get(Calendar.YEAR);
            System.out.println("今年是:" + year + "年");
    
            //3、获取系统当前月
            int month = current.get(Calendar.MONTH);
            System.out.println("本月是:" + (month + 1) + "月");
    
            //4、获取系统当前日
            int day = current.get(Calendar.DATE);
            System.out.println("今天是" + day + "号");
    
            //5、获取上午跟下午
            int am_pm = current.get(Calendar.AM_PM);
            if (am_pm == 0)
                System.out.println("是上午");
            else
                System.out.println("是下午");
    
            //6、获取当前的系统时间[date-->String]的过程
            Date time = current.getTime();//获取的是当前系统的时间,Wed Dec 29 17:20:51 CST 2021
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
            String showTime = format.format(time);
            System.out.println("当前系统时间为:" + showTime);
    
            //7、自定义日历的时间
            String strTime = "2000-03-05";
            Date date = new SimpleDateFormat("yyyy-MM-dd").parse(strTime);
            current.setTime(date);//将时间对象data设置为新的日历
            System.out.println("修改后的系统时间为:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(current.getTime()));
    
        }
    
    }
    
    

    在Calendar类中,周日是1,周一是2,周二是3,依次类推。

    三、SimpleDateFormat类

    SimpleDateFormat类可以实现java中日期格式的转化,将String类型的时间格式转化成Date类型或者将Date类型时间转化成为String类型

    1.String 类型转化成Date

    try {
                String startTime = "2021-12-29";
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Date start = sdf.parse(startTime);
                System.out.println(start);
                //getTime():返回的时间是距离1970年的毫秒数.值不受setTime()的影响
                System.out.println(start.getTime());
            }catch (ParseException e){
                e.printStackTrace();
    
            }
    
    • 这里要注意,传递进来的startTime是String类型的字符串,其格式必须和SimpleDateFormate里面的参数形式一直,不是何格式的字符串都可以转化,要不会出现转发异常。
    • SimpDateFormat的parse()方法,可能抛出ParseException异常,需要异常处理

    2.Date类型转化成为String

    //获取系统当前时间
    Date now=new Date();
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm");
    System.out.println(sdf.format(now)); //2021/12/29 15:12
    

    3.其它日期格式

    SimpleDateFormat sdf0 =new SimpleDateFormat("Gyyyy年MM月dd日 HH时mm分ss秒");
     //公元2021年12月29日 15时13分32秒
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
    //2021/12/29 15:13
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //2021-12-29 15:13:32
    SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
    //2021年12月29日 15时13分32秒 星期三 
    SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy/MM/dd E");
    //2021/12/29 星期三
    SimpleDateFormat sdf5 = new SimpleDateFormat("一年中的第 D 天 ,第w个星期 ,一个月中第W个星期 ,k时 z时区");
    //一年中的第 363 天 ,第1个星期 ,一个月中第5个星期 ,15时 CST时区
    

    SimpleDateFormat日期-时间格式模式参数::

    字母 对应日期或时间元素 表示 示例
    G 年代标志符 标志符 Text AD
    y Year 1996; 96
    M 年中的月份 Month July; Jul; 07
    w 年中的周数 Number 27
    W 月份中的周数 Number 2
    D 年中的天数 Number 189
    d 月份中的天数 Number 10
    F 月份中的星期 Number 2
    E 星期中的天数 Text Tuesday; Tue
    a Am/pm 标记 Text PM
    H 一天中的小时数(0-23) Number 0
    k 一天中的小时数(1-24) Number 24
    K am/pm 中的小时数(0-11) Number 0
    h am/pm 中的小时数(1-12) Number 12
    m 小时中的分钟数 Number 30
    s 分钟中的秒数 Number 55
    S 毫秒数 Number 978
    z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
    Z 时区 RFC 822 time zone -0800

    四、后记

    最后:案例这里就不介绍了呀,上面的三个类Date、SimpleDateFormat、Calendar理解到了,可以根据百度如何实现需求,在看别人的代码就可以看懂了,而不是懵的,只会复制黏贴。

    其实java种的类很多方法很多,不是每个都要理解到、需要用的时候可以看懂就好。但是常用的还是要理解,比如时间类,因为工作中用到的就很多。数据就天天要使用到时间。
    我还处于升级到第一步的过程中-----熟练

    目前不怎么喜欢用语雀记笔记,因为笔记记多了,加载的时候很慢。看的时候觉得不是很方便

    参考文章1:Java的Date类与Calendar类
    参考文章2:java时间类Date、Calendar及用法(推荐)
    参考文章3:java 中的Calendar常用方法(推荐)
    参考文章4:java 日期相关Date、SimpleDateFormat、Calendar区分和使用

    相关文章

      网友评论

          本文标题:java 日期相关Date、SimpleDateFormat、C

          本文链接:https://www.haomeiwen.com/subject/etqgeltx.html