Java中的日期和时间类以及Calendar类用法详解编程语言

Java日期和时间类简介
Java 的日期和时间类位于 java.util 包中。利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间。
Date 类

Date 类是 Java 中的日期时间类,其构造方法比较多,下面是常用的两个:
Date():使用当前的日期和时间初始化一个对象。
Date(long millisec):从1970年01月01日00时(格林威治时间)开始以毫秒计算时间,计算 millisec 毫秒。如果运行 Java 程序的本地时区是北京时区(与格林威治时间相差 8 小时),Date dt1=new Date(1000);,那么对象 dt1 就是1970年01月01日08时00分01秒。

请看一个显示日期时间的例子:

 import java.util.Date; 
public class Demo{ 
  public static void main(String args[]){ 
    Date da=new Date(); //创建时间对象 
    System.out.println(da); //显示时间和日期 
    long msec=da.getTime(); 
    System.out.println("从1970年1月1日0时到现在共有:" + msec + "毫秒"); 
  } 
}

运行结果:

 Mon Feb 05 22:50:05 CST 2007 
从1970年1月1日0时到现在共有:1170687005390 毫秒

一些比较常用的 Date 类方法:
Java中的日期和时间类以及Calendar类用法详解编程语言
Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。若需要修改时间显示的格式可以使用“SimpleDateFormat(String pattern)”方法。

例如,用不同的格式输出时间:

 import java.util.Date; 
import java.text.SimpleDateFormat; 
public class Demo{ 
  public static void main(String args[]){ 
    Date da=new Date(); 
    System.out.println(da); 
    SimpleDateFormat ma1=new SimpleDateFormat("yyyy 年 MM 月 dd 日 E 北京时间"); 
    System.out.println(ma1.format(da)); 
    SimpleDateFormat ma2=new SimpleDateFormat("北京时间:yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒"); 
    System.out.println(ma2.format(-1000)); 
  } 
}

运行结果:

 Sun Jan 04 17:31:36 CST 2015 
2015 年 01 月 04 日 星期日 北京时间 
北京时间:1970 年 01 月 01 日 07 时 59 分 59 秒

Calendar 类

抽象类 Calendar 提供了一组方法,允许把以毫秒为单位的时间转换成一些有用的时间组成部分。Calendar 不能直接创建对象,但可以使用静态方法 getInstance() 获得代表当前日期的日历对象,如:

 
  Calendar calendar=Calendar.getInstance();

该对象可以调用下面的方法将日历翻到指定的一个时间:

 void set(int year,int month,int date); 
void set(int year,int month,int date,int hour,int minute); 
void set(int year,int month,int date,int hour,int minute,int second);

若要调用有关年份、月份、小时、星期等信息,可以通过调用下面的方法实现:

 
  int get(int field);

其中,参数 field 的值由 Calendar 类的静态常量决定。其中:YEAR 代表年,MONTH 代表月,HOUR 代表小时,MINUTE 代表分,如:

 
  calendar.get(Calendar.MONTH);

如果返回值为 0 代表当前日历是一月份,如果返回 1 代表二月份,依此类推。

由 Calendar 定义的一些常用方法如下表所示:
Java中的日期和时间类以及Calendar类用法详解编程语言
GregorianCalendar 类

GregorianCalendar 是一个具体实现 Calendar 类的类,该类实现了公历日历。Calendar 类的 getInstance() 方法返回一个 GregorianCalendar,它被初始化为默认的地域和时区下的当前日期和时间。

GregorianCalendar 类定义了两个字段:AD 和 BC,分别代表公元前和公元后。其默认的构造方法 GregorianCalendar() 以默认的地域和时区的当前日期和时间初始化对象,另外也可以指定地域和时区来建立一个 GregorianCalendar 对象,例如:

 GregorianCalendar(Locale locale); 
GregorianCalendar(TimeZone timeZone); 
GregorianCalendar(TimeZone timeZone,Locale locale);

GregorianCalendar 类提供了 Calendar 类中所有的抽象方法的实现,同时还提供了一些附加的方法,其中用来判断闰年的方法为:

 Boolean isLeapYear(int year);

如果 year 是闰年,该方法返回 true,否则返回 false。

Java Object类
Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来。

定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类。例如:

 public class Demo{ 
  // ... 
}

实际上是下面代码的简写形式:

 public class Demo extends Object{ 
  // ... 
}

在Java中,只有基本类型不是对象,例如数值、字符和布尔型的值都不是对象,所有的数组类型,不管是对象数组还是基本类型数组都是继承自 Object 类。

Object 类定义了一些有用的方法,由于是根类,这些方法在其他类中都存在,一般是进行了重载或覆盖,实现了各自的具体功能。
equals() 方法

Object 类中的 equals() 方法用来检测一个对象是否等价于另外一个对象,语法为:

 
  public boolean equals(Object obj)

例如:

 obj1.equals(obj2);

在Java中,数据等价的基本含义是指两个数据的值相等。在通过 equals() 和“==”进行比较的时候,引用类型数据比较的是引用,即内存地址,基本数据类型比较的是值。

注意:
equals()方法只能比较引用类型,“==”可以比较引用类型及基本类型。
当用 equals() 方法进行比较时,对类 File、String、Date 及包装类来说,是比较类型及内容而不考虑引用的是否是同一个实例。
用“==”进行比较时,符号两边的数据类型必须一致(可自动转换的数据类型除外),否则编译出错,而用 equals 方法比较的两个数据只要都是引用类型即可。
hashCode() 方法

散列码(hashCode)是按照一定的算法由对象得到的一个数值,散列码没有规律。如果 x 和 y 是不同的对象,x.hashCode() 与 y.hashCode() 基本上不会相同。

hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。

在 Java 中,对 hashCode 的规定如下:
在同一个应用程序执行期间,对同一个对象调用 hashCode(),必须返回相同的整数结果――前提是 equals() 所比较的信息都不曾被改动过。至于同一个应用程序在不同执行期所得的调用结果,无需一致。
如果两个对象被 equals() 方法视为相等,那么对这两个对象调用 hashCode() 必须获得相同的整数结果。
如果两个对象被 equals() 方法视为不相等,那么对这两个对象调用 hashCode() 不必产生不同的整数结果。然而程序员应该意识到,对不同对象产生不同的整数结果,有可能提升hashTable(后面会学到,集合框架中的一个类)的效率。

简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的 hashCode 值相同,它们并不一定相同。在 Java 规范里面规定,一般是覆盖 equals() 方法应该连带覆盖 hashCode() 方法。
toString() 方法

toString() 方法是 Object 类中定义的另一个重要方法,是对象的字符串表现形式,语法为:

 
  public String toString()

返回值是 String 类型,用于描述当前对象的有关信息。Object 类中实现的 toString() 方法是返回当前对象的类型和内存地址信息,但在一些子类(如 String、Date 等)中进行了 重写,也可以根据需要在用户自定义类型中重写 toString() 方法,以返回更适用的信息。

除显式调用对象的 toString() 方法外,在进行 String 与其它类型数据的连接操作时,会自动调用 toString() 方法。

以上几种方法,在Java中是经常用到的,这里仅作简单介绍,让大家对Object类和其他类有所了解,详细说明请参考 Java API 文档。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/7573.html

(0)
上一篇 2021年7月18日 18:47
下一篇 2021年7月18日 18:47

相关推荐

发表回复

登录后才能评论