Java的Period类如何使用

蜗牛 互联网技术资讯 2022-05-24 228 0

这篇文章主要介绍“Java的Period类如何使用”,在日常操作中,相信很多人在Java的Period类如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的Period类如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    Duration和Period

    说明

    Duration类通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒。时间量可以为正也可以为负,比如1天(86400秒0纳秒)、-1天(-86400秒0纳秒)、1年(31556952秒0纳秒)、1毫秒(0秒1000000纳秒)等。

    Period类通过年、月、日相结合来描述一个时间量,最高精度是天。时间量可以为正也可以为负,例如2年(2年0个月0天)、3个月(0年3个月0天)、4天(0年0月4天)等。

    这两个类是不可变的、线程安全的、最终类。都是JDK8新增的。

    Duration用法

    创建方法

    通过时间单位创建

    如果仅一个值表示,如使用ofDays()方法,那么其他值为0。

    若仅用ofWeeks,则其天数为week数乘以7.

    Period fromUnits = Period.of(3, 10, 10);
    Period fromDays = Period.ofDays(50);
    Period fromMonths = Period.ofMonths(5);
    Period fromYears = Period.ofYears(10);
    Period fromWeeks = Period.ofWeeks(40);  //280天

    通过LocalDate创建

    LocalDate startDate = LocalDate.of(2015, 2, 20);
    LocalDate endDate = LocalDate.of(2017, 1, 15);
    // startDate减endDate
    Period period = Period.between(startDate, endDate);

    解析方法

    格式1:“PnYnMnWnD”

    P:开始符,表示period(即:表示年月日);

    Y:year;

    M:month;

    W:week;

    D:day

    P, Y, M, W, D都可以用大写或者小写。

    Period period = Period.parse("P2Y");       //2年
    Period period = Period.parse("P2Y3M5D");   //2年3月5天
    Period period = Period.parse("P1Y2M3W4D"); // 1年2月3周4天。即:1年2月25天

    源码

    public final class Period
            implements ChronoPeriod, Serializable {
        //-----------------------------------------------------------------------
        /**
         * Obtains a {@code Period} from a text string such as {@code PnYnMnD}.
         * <p>
         * This will parse the string produced by {@code toString()} which is
         * based on the ISO-8601 period formats {@code PnYnMnD} and {@code PnW}.
         * <p>
         * The string starts with an optional sign, denoted by the ASCII negative
         * or positive symbol. If negative, the whole period is negated.
         * The ASCII letter "P" is next in upper or lower case.
         * There are then four sections, each consisting of a number and a suffix.
         * At least one of the four sections must be present.
         * The sections have suffixes in ASCII of "Y", "M", "W" and "D" for
         * years, months, weeks and days, accepted in upper or lower case.
         * The suffixes must occur in order.
         * The number part of each section must consist of ASCII digits.
         * The number may be prefixed by the ASCII negative or positive symbol.
         * The number must parse to an {@code int}.
         * <p>
         * The leading plus/minus sign, and negative values for other units are
         * not part of the ISO-8601 standard. In addition, ISO-8601 does not
         * permit mixing between the {@code PnYnMnD} and {@code PnW} formats.
         * Any week-based input is multiplied by 7 and treated as a number of days.
         * <p>
         * For example, the following are valid inputs:
         * <pre>
         *   "P2Y"             -- Period.ofYears(2)
         *   "P3M"             -- Period.ofMonths(3)
         *   "P4W"             -- Period.ofWeeks(4)
         *   "P5D"             -- Period.ofDays(5)
         *   "P1Y2M3D"         -- Period.of(1, 2, 3)
         *   "P1Y2M3W4D"       -- Period.of(1, 2, 25)
         *   "P-1Y2M"          -- Period.of(-1, 2, 0)
         *   "-P1Y2M"          -- Period.of(-1, -2, 0)
         * </pre>
         *
         * @param text  the text to parse, not null
         * @return the parsed period, not null
         * @throws DateTimeParseException if the text cannot be parsed to a period
         */
        public static Period parse(CharSequence text) {
            // 其他代码
        }
     
        // 其他代码
    }

    获得年月日

    period.getYears();
    period.getMonths();
    period.getDays();

    比较方法

    用between来比较日期。

    LocalDate startDate = LocalDate.of(2015, 2, 20);
    LocalDate endDate = LocalDate.of(2017, 1, 15);
    // startDate减endDate
    Period period = Period.between(startDate, endDate);
    // 任何一个时间单元为负数,则返回true。true:endDate早于startDate
    period.isNegative()

    增减方法

    Period period = Period.parse("P2Y3M5D");
    period.plusDays(50);
    period.minusMonths(2);

    转换单位

    Period period = Period.parse("P1Y2M3D");
    period.toTotalMonths(); // 14

    取值方法

    Period period = Period.parse("P1Y2M3D");
    period.getYears();  // 1
    period.getMonths(); // 2
    period.getDays();   // 3

    到此,关于“Java的Period类如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注蜗牛博客网站,小编会继续努力为大家带来更多实用的文章!

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论

    有免费节点资源,我们会通知你!加入纸飞机订阅群

    ×
    天气预报查看日历分享网页手机扫码留言评论Telegram