java时间操作三部曲之java.util.GregoiranCalendar

前面已经介绍过了它的祖先Date和父亲Calendar,今天就来认识一下GregorianCalendar。在java1.0版本的时候Date还是很强大的,但是java类库的设计者认为保存时间和给时间点命名的类要分开,于是就有了表示时间的Date和表示大家熟悉的日历表示法的GregorianClendar。上一篇介绍了Calendar,实际上今天的主角就是扩展了Calendar,变得更加通用。

类构造函数

1.GregorianCalendar() 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar

2.GregorianCalendar(int year, int month, int dayOfMonth) ,还有重载的方法,参数顺序有时间点的大到小顺序 :年,月,日,时,分,秒。为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

GregorianCalendar gc = new GregorianCalendar(2016,11,06); //2016-11-06

3.GregorianCalendar(Locale aLocale) 在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。(包括一下两个构造函数,在近期开发中基本没有使用过,后面用了在更新吧)

4.GregorianCalendar(TimeZone zone) 在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar

5.GregorianCalendar(TimeZone zone, Locale aLocale)  在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar

  类方法

GregorianCalendar类继承于Calendar类,因此我们用的大多数方法都已经在上一篇介绍过了,这里只讲述几个重要方法。

日历的作用是提供某个时间点的年,月,日这些信息如何封装好的GregorianCalendar类中获取的,就是调用get方法,并使用Calendar中的部分常量,例:

public static void main(String[] args) {
        // TODO Auto-generated method stub

        GregorianCalendar now = new GregorianCalendar();
        int year = now.get(Calendar.YEAR);
        int month = now.get(Calendar.MONTH)+1;
        int day = now.get(Calendar.DAY_OF_MONTH);
        System.out.println("当前日期:"+year+"年 "+month+"月"+day+"日");//当前日期:2016年 11月6日
        ////设置新的时间
        now.set(Calendar.YEAR,1991);
        now.set(Calendar.MONTH,5);
        now.set(Calendar.DAY_OF_MONTH,20);
        System.out.println(now);     //是不是看着下面这段有点眼熟,没错,在上一篇讲过。
        //java.util.GregorianCalendar[time=?,areFieldsSet=false,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=1991,MONTH=5,WEEK_OF_YEAR=46,WEEK_OF_MONTH=2,DAY_OF_MONTH=20,DAY_OF_YEAR=311,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=1,SECOND=54,MILLISECOND=363,ZONE_OFFSET=28800000,DST_OFFSET=0]

    }

   也可以给当前时间增加天数,月份等,例:

now.add(Calendar.MONTH,2);//正数增加,负数减少,此句的意思是:增加三个月

下面用该类写一个显示当前月的日历

    public static void main(String[] args) {
        //创建当前日期对象
        GregorianCalendar now = new GregorianCalendar();

        //获取当前月,当前天
        int nowMonth = now.get(Calendar.MONTH);
        int nowDay = now.get(Calendar.DAY_OF_MONTH);

        //设置为当前月的第一天
        now.set(Calendar.DAY_OF_MONTH,1);
        //获知当月第一天是周几
        int weekday = now.get(Calendar.DAY_OF_WEEK);

        //获取当前地区星期的起始
        int firstDayOfWeek = now.getFirstDayOfWeek();

        //计算第一周显示时的缩进
        int indent=0;
        while(weekday != firstDayOfWeek){
            indent++;
            now.add(Calendar.DAY_OF_MONTH, -1);
            weekday = now.get(Calendar.DAY_OF_WEEK);//这里减一天就会到上个月的最后一天,依次类推,找到和星期的起始对等的那天,脑补一下日历,想看上个月的最后一天星期几

        }

        //准备打印日历的星期部分
        String[] weeknames = new DateFormatSymbols().getShortWeekdays();
        do{//一开始我是没明白这个do循环,在上面的代码中我们已经把日期减到当前地区的星期起始那一天,所以先循环一遍,这样在加一圈就能正确打印七个星期的缩写了
            System.out.printf("%6s",weeknames[weekday]);
            now.add(Calendar.DAY_OF_MONTH,1);
            weekday=now.get(Calendar.DAY_OF_WEEK);

        } while(weekday != firstDayOfWeek);

        System.out.println();

        for (int i = 0; i < indent; i++) {
            System.out.printf("%7s"," ");//打印縮進
        }

        now.set(Calendar.DAY_OF_MONTH, 1);//回歸到當月第一天

        do{
            int day=now.get(Calendar.DAY_OF_MONTH);
            System.out.printf("%6d", day);
            if(day == nowDay)
                System.out.print("*");
            else
                System.out.print(" ");
            now.add(Calendar.DAY_OF_MONTH, 1);
            weekday=now.get(Calendar.DAY_OF_WEEK);
            if(weekday == firstDayOfWeek)
                System.out.println();
        } while (now.get(Calendar.MONTH) == nowMonth);
    }

好了,這個類就介紹到這裏了,不知道這麽回事,輸入法突然變成繁體字了,我是正中的大陸人的啦,哈哈哈。

时间: 2024-10-18 23:24:53

java时间操作三部曲之java.util.GregoiranCalendar的相关文章

java时间操作

1.2种常见时间操作: import java.util.Date; import java.util.Calendar; import java.text.SimpleDateFormat; public class TestDate{ public static void main(String[] args){ Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:m

Java日期工具类,Java时间工具类,Java时间格式化

Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright  蕃薯耀 2017年2月4日 15:03:27 星期六 http://www.cnblogs.co

java 时间操作

记录一些时间常用操作 public class DateCa { public static void main(String[] args) throws ParseException { /** 时间操作首推Calendar 格里高利历 **/ Calendar ca = Calendar.getInstance(); //获取日期的单个属性:年,月,周,日,时,分 System.out.println(ca.get(Calendar.YEAR)); System.out.println(c

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->

定时任务,客户页面操作,使用java.util.timer(要求时间精确度不高的定时任务)

定时任务,客户页面操作,使用java.util.timer,因为@schedule 注解中定时的时间不能在不启动项目情况下修改. timer.cancel()任务队列全部移除,task.cancel()只移除队列中的一个任务. 页面操作定时任务,传递参数(访问任务接口URL和对应参数),修改timer 中Task,修改需要先移除Task.cancel(). 注意timer只能有一个对象,因为多个就会造成多线程定时任务(多线程需要保证每个队列timer中任务不重复). 好了,不多说 上代码:这里数

Java学习(十一):Java中的常用时间操作

java中的时间操作不外乎这四种情况:获取当前时间,获取某个时间的某种格式,设置时间和时间的运算. 1.获取当前时间 有两种方式可以获得,第一种,使用java.util.Date类. Date date = new Date(); date.getTime(); 还有一种方式,使用System.currentTimeMillis(); 这两种方式获得的结果是一样的,都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数. 2.获取某

Java Calendar 类的时间操作

Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java 算法(24) 版权声明:本文为博主原创文章,未经博主允许不得转载. JavaCalendar 类时间操作,这也许是创建日历和管理最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/article/details/9

Java常用类库之时间操作类——Date、Calendar、DateFormat、SimpleDateFormat及实例操作

学习目标 掌握Date类的使用 可以使用Calendar类取得一个完整的日期 掌握日期格式化的操作 可以使用SimpleDateFormat进行日期的格式化转换操作 编写取得日期的操作类 进一步掌握Calendar类的使用 进一步掌握SimpleDateFormat类的使用 Date类是一个较为常用的类,但是其操作的日期格式会有一些不符合个人要求,而如果想要进一步取得一些自己需要的时间,则可以使用Calendar类. Date类 在java.util包中定义了Date类,Date类本身使用非常简