一、Date类

1、认识Date类

java.util包下的Date类,Date对象既包含日期,该类从JDK1.0就开始有了,所以大部分的构造器和方法已经过时,编写时有时会报错。

Date类一共有6个构造器,其中4个已经Deprecated,剩余两个如下:

2、构造器

Date():生成一个代表当前日期时间的Date对象,该构造器在底层调用System.currentTimeMillis()获得long整数作为日期参数。

Date(long date):根据一个指定的long型整数来生成一个Date对象。参数表示将创建的Date对象和GMT 1970.1.1 00:00:00之间的时间差,单位毫秒。

3、方法:

boolean after(Date when): 测试该时期是否在指定日期when之后。

boolean before(Date when) : 测试该日期是否在指定日期when之前。

long getTime() : 返回该时间对应的long型整数,即从GMT 1970.1.1 00:00:00到该Date对象之间的时间差,单位毫秒。

void setTime(long time) : 设置该Date对象的时间。

compareTo(Date when) : 测试的Date在指定的Date之前返回小于0的数,之后,返回大于0的数,相等,返回0。

4、java实现:

import java.util.Date;public class DateTest {public static void main(String[] args){Date d1 = new Date();//获取当前时间之后1min的时间Date d2 = new Date(System.currentTimeMillis() + 10000*6);System.out.println(d1);System.out.println(d2);//测试的Date在指定的Date之前返回小于0的数,之后,返回大于0的数,相等,返回0System.out.println(d1.compareTo(d2));System.out.println(d1.before(d2));d1.setTime(d2.getTime());System.out.println(d1);System.out.println(d2);}
}

结果:

二、Calendar类

Calendar类和Date一样是获得日期的工具类,不过,Calendar类不允许实例化,只能通过封装好的静态方法getInstance()来获得Calendar对象。

1、Calendar和Date可以自由转换

import java.util.Calendar;
import java.util.Date;public class CalendarToDate {public static void main(String[] args){//创建一个默认的Calendar对象Calendar calendar = Calendar.getInstance();//从Calendar对象中获得对应的Date对象Date date = calendar.getTime();System.out.println(date);System.out.println(calendar.getTime());
//因为没有可以接收Date对象的Calendar构造器,无法用Calendar对象接收一个Date对象,
//所以先获得Calendar的实例,在调用setTime()方法Calendar calendar2 = Calendar.getInstance();calendar2.setTime(date);System.out.println(date);System.out.println(calendar2.getTime());}
}

结果:

2、Calendar的常规用法

基本操作:

Date getTime():获得Calendar代表的时间。

void set(int field,int  value):将给定的日历字段设置为给定值。

void set(int year,int month,int date):设置年、月、日。

void set(int year,int month,int,date,int hour,int minure,int second):设置Calendar对象的年、月、日、时、分、秒。

int get(int field):这的field是Calendar类的类变量,如 Calendar.YEAR等,该方法获的指定字段的值。

void add(int field,int value):根据日历的规则,对给定的field字段进行加减指定的value时间量,特别的对于超出指定字段所能表示的最大范围时,会对上下级做出改变,对下一级是修正到变化最小的值。

void roll(int field,int value):与add()方法类似,不过特别的,不向上级增大,对下级的修正与add()的一样。

int getActualMaximum(int field):返回指定日历字段可能拥有的最大值。例如,月的最大值是11,因为,Calendar.MONTH的起始值是0而不是1。

int getActualMinimum(int field):返回指定日历字段可能拥有的最小值,例如,月的最小值是0,而不是1。

import java.util.Calendar;
//静态导入
import static java.util.Calendar.*;public class CalendarTest {public static void main(String[]  args){Calendar c = Calendar.getInstance();System.out.println(c);System.out.println(c.getTime());//取出年System.out.println(c.get(YEAR));//取出月份System.out.println(c.get(MONTH)+1);//取出日System.out.println(c.get(DATE));//分别设置年、月、日、小时、分钟、秒c.set(2003,10,23,12,32,33);//获取c对象代表的时间System.out.println(c.getTime());//将Calendar的年向前推一年c.add(YEAR,-1);System.out.println(c.getTime());c.roll(MONTH,-12);System.out.println(c.getTime());c.add(MONTH,-12);System.out.println(c.getTime());}
}

结果:

3、两种解释日历字段的模式(容错性):

lenient模式和non-lenient模式。当处于Calendar的leniend模式时,允许每个时间字段超出它允许范围的值,但当用setLenient(boolean true)来显式关闭lenient模式时,每个时间字段不在被允许超出允许的范围值,抛出异常。

import java.util.Calendar;public class LenientTest {public static void main(String[] args){Calendar cal = Calendar.getInstance();System.out.println(cal.getTime());//结果是YEAR字段加1,MONTH字段为1(2月)cal.set(Calendar.MONTH,13);System.out.println(cal.getTime());//关闭容错性cal.setLenient(false);cal.set(Calendar.MONTH,13);System.out.println(cal.getTime());}
}

结果:

4、set()方法的延迟修改

set(f,value)中还设置一个内部成员变量,用于保存被指定修改的时间字段的结果值,指示该字段已经被修改,并直到下次调用到任何需要输出时间的方法时才会重新计算时间(代表实际时间的long型整数),避免多次计算。

import java.util.Calendar;public class LazyTest {public static void main(String[] args){Calendar cal = Calendar.getInstance();cal.set(2003,7,31);System.out.println(cal.getTime());//将月份设为9,但9,。31号不存在,如果立即修改,系统将会把cal自动调整到2003.10.1cal.set(Calendar.MONTH,8);
//        不注释下一行时,得到的结果是10月份的
//        System.out.println(cal.getTime());//设置DATE字段为5cal.set(Calendar.DATE,5);System.out.println(cal.getTime());}
}

结果:

Date类与Calendar类相关推荐

  1. 【Java】Date类和Calendar类必知必会

    Date类简介 Date 类: java.util.Date Date 类表示指定的时间信息,可以精确到毫秒 不支持国际化 该类的许多方法已过时 获取当前系统时间: new Date(); 其实这个构 ...

  2. JAVA基础再回首(十三)——BigInteger类、BigDecimal类、Date类、DateFormat类、Calendar类

    JAVA基础再回首(十三)--BigInteger类.BigDecimal类.Date类.DateFormat类.Calendar类 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://b ...

  3. 正则表达式、常用类(Pattern类、Matcher类、Math类、System类、Random类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类)

    JAVA学习第十六天-正则表达式.常用类(Pattern类.Matcher类.Math类.System类.Random类.BigDecimal类.Date类.SimpleDateFormat类.Cal ...

  4. Java中Date类和Calendar类的使用

    java.util 包中由许多常用的类组成,其中主要是用于处理一组对象的集合类.例如ArrayList和HashMap类:它还包含用于处理日期和时间的类,例如Date类和Calendar类:下面将介绍 ...

  5. Java之Date类和Calendar类的区别

    Date类:对于处理日期.时间,Java提供了Date类,此处的Date是指java.util包下的Date类:Date对象既包含日期,也包含时间.Date类从JDK1.0起就已经存在,经过不停的迭代 ...

  6. 学习-Java常用类之Calendar类

    第1关:学习-Java常用类之Calendar类 任务描述 本关任务:获取给定年月的最后一天. 相关知识 我们通过之前的学习已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定 ...

  7. Java常用类之Calendar类和GregorianCalendar类

    Java常用类之Calendar类和GregorianCalendar类 20150802 Calendar类和GregorianCalendar类 -->GregorianCalendar(公 ...

  8. JavaSE核心之一:Date类、Calendar类、Math类、枚举;

    1.Date类 1) java.util.Date类用于封装日期及时间信息,一般仅用它显示某个日期,不对他作任何操作处理,作处理用Calendar类,计算方便. 2) Date 类本质上拥有一个lon ...

  9. java常用类解析十:Date类和Calendar类示例

    1.Date类实例:格式化输出当前日期 [java] view plaincopy <span style="font-size:16px;">package demo ...

  10. 5、时间日期的处理:Java Date类、Calendar类详解

    在 Java 中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar 类完成.其中,Date 类主要封装了系统的日期和时间的信息,Calendar 类则会根 ...

最新文章

  1. 【old】mapX距离工具源码,delphi7+mapx5.0
  2. 【放置奇兵】tips(神圣伤害)
  3. php怎么运行网页_PHP的作用是什么?
  4. 阿里云设置域名解析到主机ip
  5. Hive 终于等来了 Flink
  6. 容器编排技术 -- Kubernetes 架构
  7. 开源软件许可协议简介
  8. java 银行卡号格式化_JS银行卡号格式化 - JavaScript常用效果 - Front-End - NalanXue's Blog...
  9. Ubuntu不能挂载移动硬盘问题Error mounting /dev/sda1 at /media/XXXX: Command-line `mount -t ntfs -o
  10. SDP在SIP协议中的应用
  11. PMP 考点 第十一章 项目风险管理
  12. android图标分组名称唯美,手机屏幕分组好听名字
  13. POC-T框架学习————7、相关脚本深入学习三
  14. 第8章 卷积神经网络
  15. 2020 HDU多校联合训练
  16. android opengl 帧动画,Android OpenGLES2.0(十三)——流畅的播放逐帧动画
  17. 隆重推荐:吴闲云 - 三国中的博弈
  18. 计算机教师资格证面试题目,教师资格证面试常见结构化面试试题
  19. 文件排版1(C语言)
  20. 7-3 计算平均成绩 (15分)

热门文章

  1. 超级管理员登陆后如果连续20分钟无操作再次操作时需要重新登陆的思路
  2. 一封黑客写给黑客的信
  3. 工程造价步骤_工程造价步骤
  4. B2. Wonderful Coloring - 2- Codeforces Round #734 (Div. 3)
  5. JDK安装和Java开发环境变量配置(详细)
  6. linux 系统挂载移动硬盘,解决移动硬盘插入linux无反应问题
  7. Python 全栈路线图(转载参考)
  8. 计算机桌面在哪个盘里,windows的桌面文件夹是哪个?
  9. ChatGLM的搭建过程
  10. SQL Server 处理百万级以上的数据处理与优化