zoukankan      html  css  js  c++  java
  • 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));
        }
    }
    复制代码
  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/judylucky/p/4501130.html
Copyright © 2011-2022 走看看