日期和时间
2019-04-22 本文已影响2人
趁年轻多奋斗
Java API中关于日期和时间,有三个主要类
- Data:表示时刻,即绝对时间,与年月日无关。
- Calendar:表示年历,Calendar是一个抽象类,表示公历的子类为Grenregorian-Calendar
- 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
表示时区,抽象类,使用静态方法来获取实例。
image.pngTimeZone zone = TimeZone.getDefault(); System.out.println(zone.getID()); System.out.println(zone.getDisplayName()); System.out.println(zone.getDSTSavings()); //返回以毫秒为单位的时钟是在夏令时提前的时间量
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 ,是线程安全。