java全家桶

日期和时间

2019-04-22  本文已影响2人  趁年轻多奋斗

Java API中关于日期和时间,有三个主要类

  1. Data:表示时刻,即绝对时间,与年月日无关。
  2. Calendar:表示年历,Calendar是一个抽象类,表示公历的子类为Grenregorian-Calendar
  3. DateFormat:表示格式化,抽象类,将字符串与Date类型进行彼此转换。常用子类:SimpleDateFormat。
  • 相关类:TimZone:表示时区 Locale:表示国家或语言

Date

Java API最早引入的日期类,不支持国际化,许多方法被废除。
两个构造方法:

public Date(long date) {
   fastTime = date;
}  //根据传入的毫秒数进行初始化
public Date() {
   this(System.currentTimeMillis());
}  //默认构造方法,根据System.currentTimerMills()的返回zhi值进行初始化。
//(返回当前时刻记录纪元时的毫秒数 纪元:1970.01.01 0 0 0)

TimZone

表示时区,抽象类,使用静态方法来获取实例。

TimeZone zone = TimeZone.getDefault();
System.out.println(zone.getID());
System.out.println(zone.getDisplayName());
System.out.println(zone.getDSTSavings()); //返回以毫秒为单位的时钟是在夏令时提前的时间量
image.png

Locale

表示国家(地区)或语言,两个主要参数:国家(地区)、语言


参数值

Calendar

Calendar类是日期和时间操作中的主要类,它表示与TimeZone和Local相关的日历信息,可以进行各种相关的运算。是一个抽象类,不能直接创建对象,可以使用如下获得该实例:

静态方法
内部结构

protected long time; //表示时刻的毫秒数
protected int[] fields[]; //表示日历中各个字段的值。主要有:


参数值

Calendar能够自动调整相关字段,通过实例点add对相关字段添加或减少(正与负)如:calendar.add(Calendar.HOUR_OF_DAY,48)
而使用点roll方法,则不改变时间范围更大的字段值。

DateFormat

DateFormat类主要在Date和字符串表示之间进行相互交换。抽象类,可通过下列静态方法创建实例:


静态方法
public final String format(Date date) //将Date转换成String
public Date parse(String source)  //将Stringz装换成Date

代码实例:


代码实例

运行结果:


效果图

SimpleDate

是DateFormat的子类,不同是它可以接受一个自定义模式作为参数。

Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E a HH时mm分ss秒");
System.out.println(sdf.format(calendar.getTime()));
效果图
各参数表示意思

相互比较:

  • Date很多过时方法,并且方法的参数与常识不符,产生无用。
  • Calendar操作繁琐。并且难以进行比较复杂的日期操作。
  • DateFormat不是线程安全。
    每次使用DateFormat都新建一个对象
    使用线程同步
    使用ThreadLocal
    使用Java 8的API ,是线程安全。
上一篇下一篇

猜你喜欢

热点阅读