Java中Date,Calendar,GregorianCalenda
来源:互联网 发布:php租房网站源码 编辑:程序博客网 时间:2024/05/19 06:16
本文中提到的内容:
1.具体类(相对于抽象类)java.util.Date
2.java.util.Calendar抽象类及其子类java.util.GregorianCalendar
Date类:
在 JDK 1.1 之前,类Date
有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化,比如规定了周日为一天中的第0天,月份也是从0开始,而年份更是减去了1990后的值。从 JDK 1.1 开始,应该使用Calendar
类实现日期和时间字段之间转换,使用DateFormat
类来格式化和解析日期字符串。Date
中的相应方法已废弃。
当然,Date获取当前的日期和时间很简单,使用Date对象的toString方法打印当前日期和时间:Date date = new Date();System.out.println(date.toString());
常用Date方法:
getTime() ---- 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此Date 对象表示的毫秒数。 //其他get方法,从JDK1.1开始由Calendar代替;
after() ---- 测试此日期是否在指定日期之后;
before ---- 测试此日期是否在指定日期之前;
equals ---- 比较两个日期的相等性.
Calendar抽象类和GregorianCalendar子类:
从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
1、使用Calendar类代表当前时间
Calendar c = Calendar.getInstance(); //返回类型Calendar
Calendar c = new GregorianCalendar(); //返回类型GregorianCalendar
由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
注:我们从Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一致),只不过返回类型不同。
使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。
另外,Calendar 与 Date 的转换非常简单:
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
calendar.setTime(date);
2、使用Calendar类代表指定的时间
Calendar c1 = Calendar.getInstance();
c1.set(2009, 3 - 1, 9);
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
set方法的声明为:
public final void set(int year,int month,int date)
以上示例代码设置的时间为2009年3月9日,其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值从0走到11,0是1月,11是12月份,如果设值最好使用如一月用Calendar.Jaunary表示,日期的值就是实际的日期值,星期是从1走到7,每周的第一天是周日而不是周一。这意味着1 = sunday, 2 = monday, …, 7 = Saturday。
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
在该方法中,参数field代表要设置的字段的类型,常见类型如下:
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同
Calendar.HOUR——12小时制的小时数
Calendar.HOUR_OF_DAY——24小时制的小时数
Calendar.MINUTE——分钟
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期几
例如:
c1.set(Calendar.DATE,10);
该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。
3、获得Calendar类中的信息
Calendar c2 = Calendar.getInstance();
//年份
int year = c2.get(Calendar.YEAR);
//月份
int month = c2.get(Calendar.MONTH) + 1;
//日期
int date = c2.get(Calendar.DATE);
//小时
int hour = c2.get(Calendar.HOUR_OF_DAY);
//分钟
int minute = c2.get(Calendar.MINUTE);
//秒
int second = c2.get(Calendar.SECOND);
//星期几
int day = c2.get(Calendar.DAY_OF_WEEK);
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("日期:" + date);
System.out.println("小时:" + hour);
System.out.println("分钟:" + minute);
System.out.println("秒:" + second);
System.out.println("星期:" + day);
使用Calendar类中的get方法可以获得Calendar对象中对应的信息,get方法的声明如下:
public int get(int field)
其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。
4.其他常用方法
void add(int field,int count) ----- 根据日历的规则,为给定的日历字段添加或减去指定的时间量
例如,要从当前日历时间减去 5 天,可以通过调用以下方法做到这一点:
add(Calendar.DAY_OF_MONTH, -5)
。
--------------------------------------------------------
boolean before(object when) ------ 判断此 Calendar
表示的时间是否在指定Object
表示的时间之前,返回判断结果。在 when
表示的时间之前,则返回true
;否则返回false
。(after方法原理同before)
---------------------------------------------------------
roll方法(两种):
public abstract void roll(int field,boolean up)
field :时间字段。
up :指示指定时间字段的值是向上滚动还是向下滚动。如果向上滚动,则使用 true,否则使用 false。
要将当前日期向上滚动一天,可以通过调用以下方法做到这一点:
roll(Calendar.DATE, true)
public void roll(int field, int amount)
field - 日历字段。
amount - 要添加到日历 field 中的有符号时间量。
含义:向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。负的时间量意味着向下滚动。
下面通过例子解释第二中方法的使用及与add的区别和注意地方:
// 2009-1-31
Calendar c = Calendar.getInstance();
c.set(2009, Calendar.JANUARY, 31);
//或使用Calendar c =new GregorianCalendar(2009, Calendar.JANUARY, 31)创建
c.add(Calendar.MONTH, 13); // 2010-2-28
c.add(Calendar.MONTH, 1); // 2010-3-28
// 2009-1-31
c.set(2009, Calendar.JANUARY, 31);
c.roll(Calendar.MONTH, 13); // 2009-2-28
c.roll(Calendar.MONTH, 1); // 2009-3-28
这两个方法都会自动调整单位小的值,如上例中DATE变成了28。
这两个方法都不会记住调整前的值,如上例中再增加1个月后DATE仍是28。
add()方法会改变单位大的值,如上例中增加13个月后YEAR变成了2010;而roll()方法不会改变单位大的值,增加13个月后YEAR还是2009
5.Calendar对象和相对时间之间的互转
Calendar c_l= Calendar.getInstance();
//将Calendar对象转换为相对时间
long t = c_l.getTimeInMillis();
//将相对时间转换为Calendar对象
Calendar l_c= Calendar.getInstance();
l_c.setTimeInMillis(t);
在程序中,某个固定的时间代表的都是一个时间点,也就是一个时间的瞬间,例如2009年3月8日15点50分0秒,在实际的应用中,经常需要对于两个时间进行比较或计算时间之间的差值,这些功能在Java语言中都可以很方便的实现。在Java语言中,时间的表达单位是毫秒。也就是说,Java语言中的时间处理可以精确到毫秒。
在Java语言中,表达时间的方式有两种:
a、绝对时间。以直观的形式来表达某个时间点,例如2009年10月10号0点0分0秒。使用这种形式表达时间,使用起来比较直观,但是不方便进行时间之间的计算。例如无法很直观的计算2020年1月1号0点0分0秒和上面这个时间之间相差多少天。绝对时间以对象的形式进行表达,Java API中提供了java.util包中的Date类和Calendar类的对象进行表达。
b、相对时间。以一个long型的数字表达某个时间点。例如102847423468。使用这种方式的优缺点和绝对时间刚好相反。这种方式很方便时间之间的计算,但是阅读起来很不直观。在Java API中以需要表达的时间点,例如2009年10月10号0点0分0秒,和GMT(格林威治时间,也就是伦敦时间)1970年1月1号0点0分0秒之间相差的毫秒数作为相对时间的数值,如果该时间在这个时间只好,则相对时间为正数,否则相对时间为负数。Java API中提供了java.lang包中的System类的currentTimeMillis方法,获得以相对时间形式描述的当前系统时间。
- Java中Date,Calendar,GregorianCalenda
- java中date和calendar的区别
- Java中Date类和Calendar类
- java中date和calendar的区别
- java中 Date,Calendar, String,Timestamp
- Java中Date( )与Calendar( )简单算法
- java中Random,Date,Calendar,DateFormat,SimpleDateFormat
- java中Calendar,simpleDateFormat,Date 操作
- Java语言中,Calendar.DATE是Calendar.DAY_OF_MONTH的同义词
- GregorianCalenda
- Java Date Calendar
- Java Calendar Date详解
- Java Calendar Date hour
- Java Date 和 Calendar
- Java Date 和 Calendar
- Java Date 和 Calendar
- Java-Date, Calendar, DateFormat
- Java Date 和 Calendar
- (一)mysql——mysql入门
- (第2讲)jQuery基本动画方法
- 为什么要实现一个自己独有的调试器
- linux下查看所有用户及所有用户组
- 利用Response对象实现2秒页面跳转小技巧
- Java中Date,Calendar,GregorianCalenda
- Node.js buffer
- 滚动的文字效果 就类似广告的LED
- 电路设计_选用LDO器件要注意哪些参数
- JS创建数组和对象
- 打印一条Log、弹出一条Toast
- 矩形覆盖——递归
- slidingmenu的简单用法
- 生成随机汉字