线程安全时间 localDateTime

主要方法

  • now:静态方法,根据当前时间创建对象
  • of:静态方法,根据指定日期/时间创建对象
  • plusDays,plusWeeks,plusMonths,plusYears:向当前LocalDate 对象添加几天、几周、几个月、几年
  • minusDays,minusWeeks,minusMonths,minusYears:从当前LocalDate 对象减去几天、几周、几个月、几年
  • plus,minus:添加或减少一个Duration 或Period
  • withDayOfMonth,withDayOfYear,withMonth,withYear:将月份天数、年份天数、月份、年份修改为指定的值并返回新的LocalDate 对象
  • getDayOfYear:获得年份天数(1~366)
  • getDayOfWeek:获得星期几(返回一个DayOfWeek枚举值)
  • getMonth:获得月份, 返回一个Month 枚举值
  • getMonthValue:获得月份(1~12)
  • getYear:获得年份
  • until:获得两个日期之间的Period 对象,或者指定ChronoUnits 的数字
  • isBefore,isAfter:比较两个LocalDate
  • isLeapYear:判断是否是闰年
LocalDate

只会获取年月日

创建LocalDate

  //获取当前年月日
  LocalDate localDate = LocalDate.now();
  //构造指定的年月日
  LocalDate localDate1 = LocalDate.of(2019, 9, 10);

获取年、月、日、星期几

 int year = localDate.getYear();
  int year1 = localDate.get(ChronoField.YEAR);
  Month month = localDate.getMonth();
  int month1 = localDate.get(ChronoField.MONTH_OF_YEAR);
  int day = localDate.getDayOfMonth();
  int day1 = localDate.get(ChronoField.DAY_OF_MONTH);
  DayOfWeek dayOfWeek = localDate.getDayOfWeek();
  int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK);
LocalTime

只会获取几点几分几秒

创建LocalTime

LocalTime localTime = LocalTime.of(13, 51, 10);
   LocalTime localTime1 = LocalTime.now();

获取时分秒

//获取小时
  int hour = localTime.getHour();
  int hour1 = localTime.get(ChronoField.HOUR_OF_DAY);
  //获取分
  int minute = localTime.getMinute();
  int minute1 = localTime.get(ChronoField.MINUTE_OF_HOUR);
  //获取秒
  int second = localTime.getSecond();
  int second1 = localTime.get(ChronoField.SECOND_OF_MINUTE);
LocalDateTime

获取年月日时分秒,等于LocalDate+LocalTime

创建LocalDateTime

  LocalDateTime localDateTime = LocalDateTime.now();
  LocalDateTime localDateTime1 = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
  LocalDateTime localDateTime2 = LocalDateTime.of(localDate, localTime);
  LocalDateTime localDateTime3 = localDate.atTime(localTime);
  LocalDateTime localDateTime4 = localTime.atDate(localDate);

获取LocalDate

   LocalDate localDate2 = localDateTime.toLocalDate();

获取LocalTime

LocalTime localTime2 = localDateTime.toLocalTime();

Instant
获取秒数

创建Instant对象

 Instant instant = Instant.now();

获取秒数

  long currentSecond = instant.getEpochSecond();

获取毫秒数

long currentMilli = instant.toEpochMilli();

个人觉得如果只是为了获取秒数或者毫秒数,使用System.currentTimeMillis()来得更为方便

修改 LocalDateLocalTimeLocalDateTimeInstant

LocalDateLocalTimeLocalDateTimeInstant为不可变对象 ,修改这些对象对象会返回一个副本

增加、减少年数、月数、天数等 以
LocalDateTime
为例

  LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10,
                14, 46, 56);
  //增加一年
  localDateTime = localDateTime.plusYears(1);
  localDateTime = localDateTime.plus(1, ChronoUnit.YEARS);
  //减少一个月
  localDateTime = localDateTime.minusMonths(1);
  localDateTime = localDateTime.minus(1, ChronoUnit.MONTHS);

通过
with
修改某些值

  //修改年为2019
  localDateTime = localDateTime.withYear(2020);
  //修改为2022
  localDateTime = localDateTime.with(ChronoField.YEAR, 2022);

  LocalDateTime localDateTime1 = LocalDateTime.now();
  System.out.println(localDateTime1);     // 2019-10-27T14:19:56.884

// 获取这个第一天的日期
  System.out.println(localDateTime1.with(TemporalAdjusters.firstDayOfMonth()));            // 2019-10-01T14:22:58.574
// 获取下个周末的日期
  System.out.println(localDateTime1.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)));

还可以修改月、日

时间计算
比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案

LocalDate localDate = LocalDate.now();
LocalDate localDate1 = localDate.with(firstDayOfYear());

比如通过firstDayOfYear()返回了当前日期的第一天日期,还有很多方法这里不在举例说明

格式化时间
LocalDate localDate = LocalDate.of(2019, 9, 10);
String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
//自定义格式化
DateTimeFormatter dateTimeFormatter =   DateTimeFormatter.ofPattern("dd/MM/yyyy");
String s3 = localDate.format(dateTimeFormatter);

DateTimeFormatter默认提供了多种格式化方式,如果默认提供的不能满足要求,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式

解析时间

LocalDate localDate1 = LocalDate.parse("20190910", DateTimeFormatter.BASIC_ISO_DATE);
LocalDate localDate2 = LocalDate.parse("2019-09-10", DateTimeFormatter.ISO_LOCAL_DATE);

和SimpleDateFormat相比,DateTimeFormatter是线程安全的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值