java中关于“时间和日期”小结

java1.0中有一个Data类,不过由于它的功能有限,后来java1.1又增加了Calendar类,之后Data类中的大部分方法就被弃用了。但是,Calendar的API还不够给力,它的实例是易变的,边切没有处理诸如闰秒这样的问题,后来java8中引入了java.time API,即本文重点研究的内容,。

Instant与Duration

Instant表示时间线上的某个点,即某个时刻的时间。
Duration表示两个时刻之间的时间差

方法描述
plus/minus在当前Instant或Duration加上/减去一个Duration
multipliedBy/dividedBy/negated返回由当前的Duration乘以/除以给定long/取反而得到的duration

LocalDate

LocalDate是带有年、月、日的日期对象,可以使用静态方法now或of静态方法构建。

方法描述
now / of / parse从当前时间构建 / 从给定时间构建 / 解析字符串中的日期构建 LocalDate
plusDays / plusWeeks / plusMonths / plusYears在当前LocalDate上加上一定的 天/星期/月/年
minusData / minusWeeks… …plus是加上一定时间,而minus是减去一定时间
withDayOfMonth / withDayOfYear / withMonth / withYear根据给定的部分日期修改原有localDate值并返回
getDateOfWeek / getDateOfMonth / getDateOfYear获取星期日期/月的日期/年的日期
getMonth / getMonthValue获取Month的枚举值或月份的1~12数字
isBefore / isAfter两个LocalDate进行比较
until获取period,两个日期之间按照给定的chronoUnits比较计算的数值
isLeapYear判断是否是闰年

TemporalAdjusters类提供了大量调整日期的方法,计算诸如“每个月的一地个星期二”之类的日期非常容易,如某个月的一个星期二可以向下面这样计算:

LocalDate firstTuesday = LocalDate.of(year,month,1).with(
    TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY)
);
方法描述
next(weekday)/previous(weekday)下一个/上一个给定的兴起日期
nextOrSame(weekday) / previousOrSame(weekday)从给定日期起下一个/上一个给定的星期日期
dayOfWeekInMonth(n,weekday)月份中第几个weekday
lastInMonth(weekday)月份中最后一个weekday
firstDayOfMonth() / firstDayOfNextMonth() / firstDayOfNextYear() /当月的第一日 / 下月的第一日 / 明年的第一日

LocalTime表示当日时刻,其挨批与LocalDate有些类似

ZonedDateTime

ZonedDateTime 表示时区时间,其对时间的操作与localDate中的方法类似
ZonedDateTime 对象的创建大致有如下几种:

  • local.atZone(zoneId)
  • ZonedDateTime.of(year,month,day,hour,minute,second,nano,zoneId)
  • instant.atZone(ZoneId.of(“UTC”))

    注:UTC代表“协调世界时间”,是不考虑夏令时的格林威治皇家天文台时间,ZoneId代表时区ID如America/New_York、Europe/Berlin

时间的解析与格式化

DateTimeFormatter类提供了三种用于打印日期/时间值的格式器:

  1. 预定义的格式器
  2. Local相关的格式器
  3. 带有定制模式的格式器

    部分预定义的格式器

格式器描述示例
ISO_LOCAL_DATE2018-06-15, 13:32:00
ISO_LOCAL_TIME2018-06-15T08, 13:32:00
ISO_ORDINAL_DATELocalDate的年和该年的第几日1969-166
RFC_1123_DATE_TIME用于邮件时间戳的标准,编篡与RFC822,并在RFC1123中将年份更改到4位web,16 jul 1969 09:32:00 -0500

要使用这些标准的格式器,可以直接调用其format方法:

String formatted = DateTimeFormatter.ISO_LOCAL_DATE  .format(dateTime);

Local相关的格式化风格,可以将时间解析成AM、PM等时间格式

风格日期时间
SHORT7/16/6909:32 AM
MEDIUMJul 16,196909:32:00 AM
LONGJulY 16,196909:32:00 AM EDT
FULLWednesday,July 16,196909:32:00 AM EDT

可以使用静态方法 ofLocalizedDateofLocalizedTimeofLocalizedDateTime创建这种格式器
例如:

 DateTimeFormatter formatter = DateTimeFormatter .ofLocalizedDateTime(FormatStyle.LONG);
 String formatted = formatter.format(dateTime);//JulY 16,1969 09:32:00 AM EDT

自定义日期格式

Formatter = DateFormatter.ofPattern("E yyyy-MM-dd HH:mm:ss a");//Web 1969-07-16 09:32:00 AM
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值