欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

跟上 Java 8 日期 CAD加密 和时间实用能力

点击: 次  来源:宝鼎软件 时间:2017-08-08

原文出处: 王爵nice

当你开始利用Java操纵日期和时间的时候,会有一些棘手。你也许会通过System.currentTimeMillis() 来返回1970年1月1日到本日的毫秒数。可能利用Date类来操纵日期;当碰着加减月份、天数的时候 你又需要用到Calendar类;当需要名目化日期的时候需要利用java.text.DateFormat类。 总而言之在Java中操纵日期不是很利便,以至于许多开拓者不得不利用第三方库,好比: joda-time。

跟上 Java 8 日期 CAD加密 和时间实用本领

现有API存在的问题

  • 线程安详: Date和Calendar不是线程安详的,你需要编写特另外代码处理惩罚线程安详问题
  • API设计和易用性: 由于Date和Calendar的设计不妥你无法完成日常的日期操纵
  • ZonedDate和Time: 你必需编写特另外逻辑处理惩罚时区和那些旧的逻辑
  • 亏得JSR 310类型中为Java8添加了新的API, 在java.time包中,新的API更正了已往的缺陷,

    新的日期API

  • ZoneId: 时区ID,用来确定Instant和LocalDateTime相互转换的法则
  • Instant: 用来暗示时间线上的一个点
  • LocalDate: 暗示没有时区的日期, LocalDate是不行变而且线程安详的
  • LocalTime: 暗示没有时区的时间, LocalTime是不行变而且线程安详的
  • LocalDateTime: 暗示没有时区的日期时间, LocalDateTime是不行变而且线程安详的
  • Clock: 用于会见当前时刻、日期、时间,用到时区
  • Duration: 用秒和纳秒暗示时间的数量
  • 最常用的就是LocalDate、LocalTime、LocalDateTime了,软件开发,从它们的名字就可以看出是操纵日期 和时间的。这些类是主要用于其时区不需要显式地指定的上下文。在本章节中我们将接头最常用的api。

    LocalDate

    LocalDate代表一个IOS名目(yyyy-MM-dd)的日期,可以存储 生日、眷念日等日期。 获取当前的日期:

    LocalDate localDate = LocalDate.now();
    System.out.println("localDate: " + localDate);
    localDate: 2017-07-20

    LocalDate可以指定特定的日期,挪用of或parse要领返回该实例:

    LocalDate.of(2017, 07, 20);
    LocalDate.parse("2017-07-20");

    虽然它尚有一些其他要领,我们一起来看看:

    为本日添加一天,也就是获取来日诰日

    LocalDate tomorrow = LocalDate.now().plusDays(1);

    从本日减去一个月

    LocalDate prevMonth = LocalDate.now().minus(1, ChronoUnit.MONTHS);

    下面写两个例子,别离理会日期 2017-07-20,获取每周中的礼拜和每月中的日:

    DayOfWeek thursday = LocalDate.parse("2017-07-20").getDayOfWeek();
    System.out.println("周四: " + thursday);
    int twenty = LocalDate.parse("2017-07-20").getDayOfMonth();
    System.out.println("twenty: " + twenty);

    试试本年是不是闰年:

    boolean leapYear = LocalDate.now().isLeapYear();
    System.out.println("是否闰年: " + leapYear);

    判定是否在日期之前或之后:

    boolean notBefore = LocalDate.parse("2017-07-20")
                    .isBefore(LocalDate.parse("2017-07-22"));
    System.out.println("notBefore: " + notBefore);
    boolean isAfter = LocalDate.parse("2017-07-20").isAfter(LocalDate.parse("2017-07-22"));
    System.out.println("isAfter: " + isAfter);

    获取这个月的第一天:

    LocalDate firstDayOfMonth = LocalDate.parse("2017-07-20")
                    .with(TemporalAdjusters.firstDayOfMonth());
    System.out.println("这个月的第一天: " + firstDayOfMonth);
    firstDayOfMonth = firstDayOfMonth.withDayOfMonth(1);
    System.out.println("这个月的第一天: " + firstDayOfMonth);

    判定本日是否是我的生日,譬喻我的生日是 2009-07-20

    LocalDate birthday = LocalDate.of(2009, 07, 20);
    MonthDay birthdayMd = MonthDay.of(birthday.getMonth(), birthday.getDayOfMonth());
    MonthDay today = MonthDay.from(LocalDate.now());
    System.out.println("本日是否是我的生日: " + today.equals(birthdayMd));

    LocalTime

    LocalTime暗示一个时间,而不是日期,下面先容一下它的利用要领。

    获取此刻的时间,输出15:01:22.144

    LocalTime now = LocalTime.now();
    System.out.println("此刻的时间: " + now);

    将一个字符串时间理会为LocalTime,输出15:02

    LocalTime nowTime = LocalTime.parse("15:02");
    System.out.println("时间是: " + nowTime);

    利用静态要领of建设一个时间

    LocalTime nowTime = LocalTime.of(15, 02);
    System.out.println("时间是: " + nowTime);