• Date和Calendar知识


    文章来源:http://www.cnblogs.com/manue1/p/4495983.html

    Java中的日期操作

    Date :         getTime() 、setTime()

    SimpleDateFormate :   Formate(Date)、 parse(String s)

    Calendar :      getInstance()、set() 、get()、getActualMaximum()、add()、

                 gettime()、setTime(Date)、

    字符串、Date、Calendar之间的转换

     Date及其常用API
    Date简介

    Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒。是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。
    固定的时间点叫纪元(epoch),是UTC时间1970年 1月 1日 00:00:00
    UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time格林威治时间)一样,是一种具有实际目的的科学标准时间。
    因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.Calendar类所取代

    复制代码
    import java.util.Date;
    
        /**
         * 测试Date 的getTime与setTime
         * @param args
         */
        public static void main(String[] args) {
            Date date =new Date();
            System.out.println(date);
            /*
             * 计算明天此刻的时间
             */
            long time =date.getTime();
            time = time+24*60*60*1000;
            date.setTime(time);
            System.out.println(date);
        }
    复制代码


    SimpleDateFormat
    SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
    简单的说,SimpleDateFormat就是根据一个特定的日期格式在字符串与Date之间相互转换。那么这个特定的日期格式是怎样定义的呢?下面我们来学习一下如何定义日期格式字符串。


    作用: 在日期格式字符串与日期之间相互转换

    在日期格式字符串中,出现的非关键字符都原意输出

    需要掌握的方法

    将Date格式化为String    String format(Date d)

    将String解析为Date    Date   parse(String s)

    复制代码
    /**
      * 通过SimpleDateFormate将字符转化为date
      * @author Administrator
      *
      */
     class TestSimpleDate{
         public static void main(String[] args) throws ParseException {
            String StrD ="2015-04-20 11:22:45";
            SimpleDateFormat sdfd =new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
            Date dat =sdfd.parse(StrD);
            System.out.println(dat);
        }
     }
    
    public class Shenri {
    
        /**
         * 1.获取用户输入的生日
         * 2.将其转换为Date
         * 3.创建一个Date用于表示当前系统时间
         * 4.用当前系统时间的毫秒值减去出身当天的毫秒值
         * 5,将差初一一天的毫秒值
         * 6.商就是经过的天数
         * @param args
         * @throws ParseException 
         */
        public static void main(String[] args) throws ParseException {
            Scanner scanner =new Scanner(System.in);
            System.out.println("以1992-05-08格式输入生日:");
            String shengri=scanner.nextLine();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date = sdf.parse(shengri);
            Date now = new Date();
            long cha;
            cha= now.getTime()-date.getTime();
            System.out.println(cha);
            int day;
            day = (int) (cha/(3600*24*1000));
            System.out.println("恭喜你活了"+day+"天");
        }
    
    }
    复制代码

    Calendar类

    java.util.Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
    Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高里历,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。

    1. getInstance()方法

    Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()。该方法可以根据当前系统所在地区获取一个适当的Calendar的子类实现。
    在实际开发中,也推荐使用该方法来实例化Calendar的对象。

    复制代码
    /**
     * Calendar 用于操作时间的类
     * 操作: 设置 获取 计算时间
     * @author Administrator
     */
    public class TestCalendar {
        
        public static void main(String[] args) {
        /*
         * 使用Calendar提供的静态方法获取适当的实例
         * 默认创建calendar表示的是当前系统的时间
         */
            Calendar calendar  = Calendar.getInstance();
            /*
             * 查看对象具体的类型
             * obj.getClass().getName()
             */
            String className
                =calendar.getClass().getName();
            System.out.println(className);
            
            //输出的是java.util.GregorianCalendar 的toString返回值
            System.out.println(calendar);
            /*
             * calendar 定义了一个方法
             * Date getTime()
             * 返回一个描述改Calendar表示的时间的Date对象
             * 
             */
                Date date =calendar.getTime();
                System.out.println(date);
                
        }
    }
    复制代码

    2. 设置日期及时间分量

    Calendar提供了一种通用的设置时间的方式:
    void set(int field,int value)
    该方法可以通过对不同的时间分量分别设置不同的值。Calendar对不同的时间分量提供了相应的常量,我们在使用set方法设置时,第一个参数就应当使用对应的常量作为时间分量。

    复制代码
    public class TestCalendar {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            /*
             * 设置时间使用Calendar提供的方法
             * void set (int field,int value)
             * 对给定的时间分量设定给定的值
             * 
             * 对Calendar 设置时间为2013-12-25
             */
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.YEAR,2013);
            calendar.set(Calendar.MONTH,11);
            /*
             * 对于几号而言 calendar 提供了两个时间分量
             * 意义完全相同,任选其一
             * DAY_OF_MONTH
             * DATE
             */
            calendar.set(Calendar.DATE,25);
            calendar.set(Calendar.DAY_OF_MONTH, 25);
        
            /*
             * 超过该时间分量允许的最大值后,会向上进位
             * 日想月进位 月向年进位
             */
            
            calendar.set(Calendar.DATE,32);
            System.out.println(calendar.getTime());
        }
    
    }
    复制代码

    3. 获取时间分量对应的值

    Calendar提供了一种通用的获取时间分量的方式:
    int get(int field)
    该方法可以通过对不同的时间分量获取相应的值。Calendar对不同的时间分量提供了相应的常量,我们在使用get方法获取时,参数就应当使用对应的常量作为时间分量。

    复制代码
    /**
     * 设置为2014-04-23
     * @author Administrator
     *
     */
    
    class TestGet{
    
        public TestGet() {
            Calendar calendar_get= Calendar.getInstance();
            calendar_get.set(Calendar.YEAR,2014);
            calendar_get.set(Calendar.MONTH,3);
            calendar_get.set(Calendar.DATE,23);
            /*
             * 获取今天是周几
             * int get(int field)
             * 获取给定的时间分量所对应的值
             * 美国人 周日为一周的第一天
             */
            System.out.println("今天是周"+(calendar_get.get(Calendar.DAY_OF_WEEK)==1?"日":calendar_get.get(Calendar.DAY_OF_WEEK)-1));
            /*
             * 获取时间 几点
             * HOUR            12小时
             * HOUR_OF_DAY     24小时制
             */
            System.out.println(calendar_get.get(Calendar.HOUR_OF_DAY)+"点"+ calendar_get.get(Calendar.MINUTE)+"分"+calendar_get.get(Calendar.SECOND)+"秒");
            /*
             * 查看今年过去多少天了
             * DAY_OF_YEAR
             */
            System.out.println("已经过了"+calendar_get.get(Calendar.DAY_OF_YEAR)+"天");
        }
    }
    复制代码
    复制代码
    /**
     * 获取某个时间分量所容许的最大值
     */
    
    class TestCalendarDemo4{
        public static void main(String[] args) {
            /*
             * int
             * 获取给定时间分量所允许的最大值
             */
            //这个月最多多少天
            Calendar calendar_max= Calendar.getInstance();
            
            int days =calendar_max.getActualMaximum(Calendar.DAY_OF_MONTH);
            System.out.println(days);
            
            //今年总共多少天
            days = calendar_max.getActualMaximum(Calendar.DAY_OF_YEAR);
            
            System.out.println(days);
        }
    }
    复制代码
    复制代码
    /**
     * 输出今年每月的最后一天
     * 就是每月多少天
     * @author Administrator
     *
     */
    class TestMaxmooth{
        public static void main(String[] args) {
            
            Calendar calendar_last = Calendar.getInstance();
            //for(int i=Calendar.JANUARY;i<=Calendar.DECEMBER;i++){}
            
            for(int i=0;i<12;i++){
                calendar_last.set(Calendar.MONTH,i);
                System.out.println(i+1+"月总共:"+calendar_last.getActualMaximum(Calendar.DAY_OF_MONTH));
            }
        }
        
    }
    复制代码
    复制代码
    /**
    add使用
    */ class Calendar_add{ public static void main(String[] args) { Calendar calendaradd = Calendar.getInstance(); System.out.println(calendaradd.getTime()); /* * 当前日期加1 */ calendaradd.add(Calendar.DAY_OF_YEAR, 1); System.out.println(calendaradd.getTime()); //加两年 calendaradd.add(Calendar.YEAR, 2); System.out.println(calendaradd.getTime()); //加到32 自动切换 calendaradd.add(Calendar.DAY_OF_YEAR, 11); System.out.println(calendaradd.getTime()); //减去12小时 calendaradd.add(Calendar.HOUR_OF_DAY, 12); System.out.println(calendaradd.getTime()); } }
    复制代码
    复制代码
    字符串  date 和Calendar 之间如何转换的
    /**
     * 测试Calendar 的setTime
     */
    class  Testsettime{
        public static void main(String[] args) throws ParseException {
            /*
             * void setTime(Date date)
             * 使当前Calendar对象描述给定的Date对象所表示的日期
             * 
             * 输入女朋友的今年的生日 , 
             * 输出明年女朋友的生日是星期几
             * 
             * 1.创建Scanner用于获取用户输入的日期
             * 2.将日期通过SimpleDateFormate转换为Date
             * 3.将date 转换为Calendar
             * 4.将Calendar加上1年
             * 5.在通过Calendar 获取对应的Date
             * 6.通过SimpleDateFormate输出成目标格式
             * 
             */
            Scanner scanner = new Scanner(System.in);
            System.out.println("以2012-01-02  格式输入女朋友的生日");
            String shengri = scanner.nextLine();
            //2
            SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
            作用: 将字符串转换为date
            Date date=sdf.parse(shengri);
            
            System.out.println(date);
            
            Calendar calengril= Calendar.getInstance();
            作用:将date转换为calendar
            calengril.setTime(date);
    
            calengril.add(Calendar.YEAR, 1);
            calengril.get(Calendar.DAY_OF_WEEK);
            作用:将calendar 转换为date
            date= calengril.getTime();
            作用:将date转换为字符串
            System.out.println(sdf.format(date)+"星期"+calengril.get(Calendar.DAY_OF_WEEK-1));
        }
    }
    复制代码
  • 相关阅读:
    使用eclipse从github导入maven项目
    J2SE 8的Lambda --- Comparator
    J2SE 8的Lambda --- functions
    J2SE 8的Lambda --- 语法
    J2SE 8的流库 --- 收集处理结果
    J2SE 8的流库 --- 转换流, 得到的还是流
    J2SE 8的流库 --- 基本类型流的使用
    J2SE 8的流库 --- 生成流
    Hadoop 3.0 安装
    程序员到底要不要读研,过来人给你几点建议!
  • 原文地址:https://www.cnblogs.com/judylucky/p/4501130.html
Copyright © 2020-2023  润新知