Java JDK7前时间相关类

186 阅读4分钟

JDK7前时间相关类

Date 时间类

时间的相关知识点

  • 全世界的时间,有一个统一的计算标准
  • 格尼尼治时间/格林威治时间(Greenwich Mean Time)简称GMT
    • 计算核心:地球自转一天是24小时,太阳直射时为正午12点
  • 原子钟:利用铯原子的震动的频率计算出来的时间,作为目前世界标准时间(UTC)
  • 中国标准时间:世界标准时间+8小时

Date类定义在java.util包下

Date类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒

  • 在Date类中定义了成员变量fastTime,用于储存时间的毫秒值

    • private transient long fastTime;
  • 利用空参构造创造的对象,默认表示系统当前时间

    • 底层原理:调用System类下的currentTimeMillis()方法并返回
  • 利用有参构造创建的对象,表示指定的时间

方法说明
public Date()创建Date对象,表示当前时间
public Date(long date)创建Date对象,表示指定时间,表示从时间原点开始,过了data毫秒的时间,date是long类型,后面要加一个L
public void setTime(long time)设置/修改时间对象的毫秒值,表示从时间原点开始,过了time毫秒的时间
public long getTime()获取时间对象的毫秒值,获取的是当前时间与时间原点的差

SimpleDateFormat 格式化时间

SimpleDateFormat类定义在java.text包下

作用:

  • 格式化:把时间变成我们喜欢的格式
  • 解析:把字符串表示的时间变成Date对象
构造方法说明
public SimpleDateFormat()构造一个SimpleDateFormat,使用默认格式 1970/1/1 上午8:00
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat,使用指定的格式
常用方法说明
public final String format(Date date)格式化(日期对象 > 字符串)
public Date parse(String source)解析(字符串 > 日期对象)

格式化的时间格式的常用的模式对应关系如下

日期或时间元素表示
y
年中的月份M
年中的周数w
月份中的周数W
年中的天数D
月份中的星期F
星期中的天数E
am/pm标记a
一天中的小时数(0-23)H
一天中的小时数(1-24)k
am/pm中的小时数(0-11)K
am/pm中的小时数(1-12)h
小时中的分钟数m
分钟中的秒数s
毫秒数S
2023-11-11 13:27:06yyyy-MM-dd HH:mm:ss
2023年11月11日 13:27:06 周四yyyy年MM月dd日 HH:mm:ss EE
  • 解析时间
//定义一个字符串表示时间
String str = "2023-11-11 11:11:11";
//利用带参构造创建SimpleDateFormat对象
//创建对象的格式要跟字符串的格式完全一致
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Alt + Enter 选择第一个,让代码先不要报错
Date date = sdf.parse(str);
sout(date.getTime());

Calendar 日历

  • Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日
  • 细节:Calendar是一个抽象类,不能直接创建对象

获取Calendar日历对象的方法

方法名说明
public static Calendar getInstance()获取当前时间的日历对象
  • 底层原理:会根据系统的不同时区来获取不同的日历对象,默认表示当前时间
  • 还会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组中

Calendar常用方法

方法名说明
public final Date getTime()获取日期对象
public final setTime(Date date)给日历设置日期对象
public long getTimeInMillis()拿到时间毫秒值
public void setTimeInMillis(long millis)给日历设置时间毫秒值
public int get(int field)获取日历中的某个字段信息
public void set(int field, int value)修改日历的某个字段信息
public void add(int field, int amount)为某个字段添加/减少指定的值
  • 获取出来的月份范围是0-11,如果获取出来的是0,那么时间是1月

  • 在西方,星期日是一周的第一天,如果获取出来的是1,那么就是星期日

  • field字段

    • java在Calendar类中,把索引对应的数字都定义成了常量
field对应常量说明
0ERA纪元
1YEAR
2MONTH
3WEEK_OF_YEAR一年中的第几周
4WEEK_OF_MONTH一个月中的第几周
5DATE/DAY_OF_MONTH一个月中的第几天(日期)
6DAY_OF_YEAR一年中的第几天
7DAY_OF_WEEK一年中的第几周
8DAY_OF_WEEK_IN_MONTH某月中的某一天
9AM_PMam或pm