Java日期时间类(超级全面)

一、JDK8 之前:日期时间 API

1. currentTimeMillis

  • System类提供的public static long currentTimeMillis():用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
    • 此方法适于计算时间差。

 2. java.util.Date

表示特定的瞬间,精确到毫秒。

  • 构造器:
    • Date():使用无参构造器创建的对象可以获取本地当前时间。
    • Date(long 毫秒数):把该毫秒值换算成日期时间对象
  • 常用方法
    • getTime(): 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    • toString(): 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
    • 其它很多方法都过时了。

3. SimpleDateFormat 

java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

可以进行格式化:日期 --> 文本

可以进行解析:文本 --> 日期

  • 构造器:
    • SimpleDateFormat() :默认的模式和语言环境创建对象
    • public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象
  • 格式化:
    • public String format(Date date):方法格式化时间对象date
  • 解析:
    • public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。

附:Java 官网文档中给出的预定义字符串表格

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

4. Calendar(日历) 

  • Date类的API大部分被废弃了,替换为Calendar。
  • Calendar 类是一个抽象类,主用用于完成日期字段之间相互操作的功能。
  • 获取Calendar实例的方法
    • 使用Calendar.getInstance()方法

    • 调用它的子类GregorianCalendar(公历)的构造器。

  • 一个Calendar的实例是系统时间的抽象表示,可以修改或获取 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND等 日历字段对应的时间值。
    • public int get(int field):返回给定日历字段的值
    • public void set(int field,int value) :将给定的日历字段设置为指定的值
    • public void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量
    • public final Date getTime():将Calendar转成Date对象
    • public final void setTime(Date date):使用指定的Date对象重置Calendar的时间
  • 常用字段

  • 注意:
    • 获取月份时:一月是0,二月是1,以此类推,12月是11
    • 获取星期时:周日是1,周二是2 , 。。。。周六是7

eg:

二、JDK8:新的日期时间 API

1. 本地日期时间:LocalDate、LocalTime、LocalDateTime

创建对象 

方法

描述

now()/ now(ZoneId zone)

静态方法,根据当前时间创建对象/指定时区的对象

of(xx,xx,xx,xx,xx,xxx)

静态方法,根据指定日期/时间创建对象

获取相应的值

getDayOfMonth()/getDayOfYear()

获得月份天数(1-31) /获得年份天数(1-366)

getDayOfWeek()

获得星期几(返回一个 DayOfWeek 枚举值)

getMonth()

获得月份, 返回一个 Month 枚举值

getMonthValue() / getYear()

获得月份(1-12) /获得年份

getHours()/getMinute()/getSecond()

获得当前对象对应的小时、分钟、秒

设置、更改值

withDayOfMonth()/withDayOfYear()/withMonth()/withYear()

将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象

with(TemporalAdjuster t)

将当前日期时间设置为校对器指定的日期时间

plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours()

向当前对象添加几天、几周、几个月、几年、几小时

minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours()

从当前对象减去几月、几周、几天、几年、几小时

plus(TemporalAmount t)/minus(TemporalAmount t)

添加或减少一个 Duration 或 Period

判断、比较

isBefore()/isAfter()

比较两个 LocalDate

isLeapYear()

判断是否是闰年(在LocalDate类中声明)

格式化、解析

format(DateTimeFormatter t)

格式化本地日期、时间,返回一个字符串

parse(Charsequence text)

将指定格式的字符串解析为日期、时间

2. 瞬时:Instant

  • Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。
    • 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
  • java.time.Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。

方法

描述

now()

静态方法,返回默认UTC时区的Instant类的对象

ofEpochMilli(long epochMilli)

静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象

atOffset(ZoneOffset offset)

结合即时的偏移来创建一个 OffsetDateTime

toEpochMilli()

返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳

中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。

instant.atOffset(ZoneOffset.ofHours(8));

3.日期时间格式化:DateTimeFormatter 

 

 

ofPattern(String pattern)

静态方法,返回一个指定字符串格式的DateTimeFormatter

format(TemporalAccessor t)

格式化一个日期、时间,返回字符串

parse(CharSequence text)

将指定格式的字符序列解析为一个日期、时间

三、日期API转换

To 遗留类

From 遗留类

java.time.Instant与java.util.Date

Date.from(instant)

date.toInstant()

java.time.Instant与java.sql.Timestamp

Timestamp.from(instant)

timestamp.toInstant()

java.time.ZonedDateTime与java.util.GregorianCalendar

GregorianCalendar.from(zonedDateTime)

cal.toZonedDateTime()

java.time.LocalDate与java.sql.Time

Date.valueOf(localDate)

date.toLocalDate()

java.time.LocalTime与java.sql.Time

Date.valueOf(localDate)

date.toLocalTime()

java.time.LocalDateTime与java.sql.Timestamp

Timestamp.valueOf(localDateTime)

timestamp.toLocalDateTime()

java.time.ZoneId与java.util.TimeZone

Timezone.getTimeZone(id)

timeZone.toZoneId()

java.time.format.DateTimeFormatter与java.text.DateFormat

formatter.toFormat()

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值