joda日期计算工具

在编写企业应用程序时,常常需要处理日期。用 Java.util.Calendar 不是太直观方便。如果您也曾使用这个类处理过日期/时间值,那么您就知道它使用起来有多麻烦。 Joda-Time — 面向 Java 应用程序的日期/时间库的替代选择。

Joda-Time 令时间和日期值变得易于管理、操作和理解。事实上,易于使用是 Joda 的主要设计目标。其他目标包括可扩展性、完整的特性集以及对多种日历系统的支持。并且 Joda 与 JDK 是百分之百可互操作的,因此您无需替换所有 Java 代码,只需要替换执行日期/时间计算的那部分代码。

maven的pom.xml

<dependency>
   <groupId>joda-time</groupId>
   <artifactId>joda-time</artifactId>
   <version>2.9.9</version>
</dependency>
案例代码:



import org.joda.time.*;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * Created by ZHOUPENGCHENG390 on 2017/7/28.
 */
public class TestJoda {
    private static final String FORMATE_DATE = "yyyy/MM/dd";
    private static final String FORMATE_SECONDS = "HH:mm:ss";
    private static final String FORMATE_FULL = FORMATE_DATE.concat(" ").concat(FORMATE_SECONDS);

    public static void main(String[] args) {
        // 当前周的周一,周日
        System.out.println(String.format("min:%s, max:%s", DateTime.now().dayOfWeek().withMinimumValue().toString("yyyy-MM-dd"), DateTime.now().dayOfWeek().withMaximumValue().toString("yyyy-MM-dd")));
        // 当前月的第一天和最后一天
        System.out.println(String.format("min:%s, max:%s", DateTime.now().dayOfMonth().withMinimumValue().toString(FORMATE_FULL), DateTime.now().dayOfMonth().withMaximumValue().toString(FORMATE_FULL)));
        // 当前年的第一天和最后一天
        System.out.println(String.format("min:%s, max:%s", DateTime.now().dayOfYear().withMinimumValue().toString("yyyy-MM-dd"), DateTime.now().dayOfYear().withMaximumValue().toString("yyyy-MM-dd")));

        //常用方法
        DateTime start = new DateTime(2017, 7, 28, 15, 00, 00);
        System.out.println("start:" + start.toString(FORMATE_DATE));
        DateTime now = DateTime.now();
        System.out.println("now:" + now.toString(FORMATE_FULL));
        System.out.println("now format with Locale.CHINESE:" + now.toString(FORMATE_FULL, Locale.CHINESE));
        System.out.println("before now 1 hours:" + now.minusHours(1).toString(FORMATE_FULL));
        System.out.println("after now 1 hours:" + now.plusHours(1).toString(FORMATE_FULL));
        System.out.println("before now 10 days:" + now.minusDays(10).toString(FORMATE_FULL));
        System.out.println("after now 30 days:" + now.plusDays(30).toString(FORMATE_FULL));
        System.out.println("before " + start.toString("yyyyMMddHHmmssSSS") + " 1 days:" + start.minusDays(1).toString("yyyyMMddHHmmssSSS"));

        Duration duration = new Duration(start, now);
        System.out.println("duration.getStandardDays(): " + start.toString(FORMATE_FULL) + "  " + now.toString(FORMATE_FULL) + " 相差的天数:" + duration.getStandardDays());
        System.out.println("duration.getStandardHours(): " + start.toString(FORMATE_FULL) + "  " + now.toString(FORMATE_FULL) + " 相差的小时数:" + duration.getStandardHours());
        System.out.println("================================================================");

        Calendar calendar = now.toCalendar(Locale.CHINESE);
        System.out.println("with JDK interact" + new SimpleDateFormat(FORMATE_DATE).format(calendar.getTime()));
        Calendar calendar1 = Calendar.getInstance();
        System.out.println("Calendar:" + new SimpleDateFormat(FORMATE_DATE).format(calendar1.getTime()));

        DateTime a = new DateTime(new Date());
        System.out.println("格式化:" + a.toString(FORMATE_DATE, Locale.CHINESE));
        DateTime b = new DateTime(2014, 1, 1, 0, 0);
        System.out.println("格式化:" + b.toString(FORMATE_DATE, Locale.CHINESE));

        String timeString = "2016-02-21";
        DateTime c = new DateTime(timeString);
        System.out.println("parse" + c.toString(FORMATE_DATE, Locale.CHINESE));

        LocalDate localDate = new LocalDate(2009, 9, 6);// September 6, 2009
        System.out.println("LocalDate:" + localDate.toString(FORMATE_DATE, Locale.CHINESE));
        LocalTime localTime = new LocalTime(13, 30, 26, 0);// 1:30:26PM
        System.out.println("LocalTime:" + localTime.toString("HH:mm:ss", Locale.CHINESE));

        LocalDate d = LocalDate.now();
        LocalDate lastDayOfPreviousMonth = d.minusMonths(1).dayOfMonth().withMaximumValue();
        System.out.println("上一个月的最后一天:" + lastDayOfPreviousMonth.toString(FORMATE_DATE, Locale.CHINESE));
        LocalDate.Property e = d.minusWeeks(1).dayOfWeek();
        System.out.println("上周的周一:" + e.withMinimumValue().toString(FORMATE_DATE, Locale.CHINESE));
        System.out.println("上周的周日:" + e.withMaximumValue().toString(FORMATE_DATE));
        System.out.println("================================================================");

        System.out.println("dayOfWeek().getAsText(Locale.CHINESE)今天星期几:" + a.dayOfWeek().getAsText(Locale.CHINESE));
        System.out.println("dayOfWeek().getAsText(Locale.CHINESE)今天几号:" + a.dayOfMonth().getAsText(Locale.CHINESE));
        System.out.println("dayOfWeek().getAsText(Locale.CHINESE)今天几月:" + a.monthOfYear().getAsText(Locale.CHINESE));
        System.out.println(".dayOfWeek().getAsText(Locale.CHINESE)去年的今天星期几:" + a.minusYears(1).dayOfWeek().getAsText(Locale.CHINESE));
        System.out.println(".monthOfYear().getAsText(Locale.CHINESE)去年的今天是几月份:" + a.minusYears(1).monthOfYear().getAsText(Locale.CHINESE));
        System.out.println(".dayOfMonth().getAsText(Locale.CHINESE)明年的今天是几号:" + a.plusYears(1).dayOfMonth().getAsText(Locale.CHINESE));
        System.out.println("Days.daysBetween计算日期间隔:" + Days.daysBetween(DateTime.parse("2017-06-27"), DateTime.parse("2017-07-02")).getDays());
        System.out.println("================================================================");

        DateTime one = DateTime.parse("2016-07-27T14:25:11");
        System.out.println(one.minuteOfDay()// 转换到 minuteOfDay
                .setCopy(17)// 设置 minuteOfDay 的数值为 17,也就是 17 分钟
                .toString(FORMATE_FULL));
        System.out.println(one.hourOfDay().setCopy(0).toString(FORMATE_FULL));
        System.out.println(one.hourOfDay().addToCopy(3));//  hourOfDay 上面增加 3个小时
        System.out.println("是否闰月:" + one.monthOfYear().isLeap());// "2014-06-27"减去4个月到"2014-02-27"// 转换到monthOfYear的模式.isLeap()// 是否闰月

        // 对于给定日期 "2015-07-02" 得到该年2月的同一天,即:2015-02-02
        DateTime srcDay = DateTime.parse("2015-07-02");
        System.out.println("monthOfYear:"+srcDay.monthOfYear().getAsText(Locale.CHINESE));//年的月份
        System.out.println(srcDay.monthOfYear().withMinimumValue().toString(FORMATE_DATE));//年的月份中最小的数值:一月
        System.out.println(srcDay.monthOfYear().withMinimumValue().plusMonths(1).toString(FORMATE_DATE));// 在一月上面加上一个月,就是二月
        String feb = srcDay.monthOfYear().withMinimumValue().plusMonths(1).toString(FORMATE_DATE);
        System.out.println("with " + srcDay.toString(FORMATE_DATE) + " to get " + feb);
        feb = srcDay.monthOfYear().setCopy(2).toString(FORMATE_DATE);
        System.out.println("with " + srcDay.toString(FORMATE_DATE) + " to get " + feb);
        feb = srcDay.monthOfYear().addToCopy(-5).toString(FORMATE_DATE);
        System.out.println("with " + srcDay.toString(FORMATE_DATE) + " to get " + feb);
        //找出2015年后10年内的闰年
        for (int i = 0; i < 10; i++) {
            DateTime in = srcDay.plusYears(i);
            if (in.year().isLeap()) {
                System.out.println(in.toString("yyyy") + " 是闰年");
            }
        }

        run();
    }


    private static void run() {
        System.out.println("========================官网示例====================");
        runInstant();
        System.out.println();
        runDateTime();
        System.out.println();
    }

    private static void runInstant() {
        System.out.println("Instant");
        System.out.println("=======");
        System.out
                .println("Instant stores a point in the datetime continuum as millisecs from 1970-01-01T00:00:00Z");
        System.out.println("Instant is immutable and thread-safe");
        System.out.println("                      in = new Instant()");
        Instant in = new Instant();
        System.out.println("Millisecond time:     in.getMillis():           " + in.getMillis());
        System.out.println("ISO string version:   in.toString():            " + in.toString());
        System.out.println("ISO chronology:       in.getChronology():       " + in.getChronology());
        System.out.println("UTC time zone:        in.getDateTimeZone():     " + in.getZone());
        System.out.println("Change millis:        in.withMillis(0):         " + in.withMillis(0L));
        System.out.println("");
        System.out.println("Convert to Instant:   in.toInstant():           " + in.toInstant());
        System.out.println("Convert to DateTime:  in.toDateTime():          " + in.toDateTime());
        System.out.println("Convert to MutableDT: in.toMutableDateTime():   "
                + in.toMutableDateTime());
        System.out.println("Convert to Date:      in.toDate():              " + in.toDate());
        System.out.println("");
        System.out.println("                      in2 = new Instant(in.getMillis() + 10)");
        Instant in2 = new Instant(in.getMillis() + 10);
        System.out.println("Equals ms and chrono: in.equals(in2):           " + in.equals(in2));
        System.out.println("Compare millisecond:  in.compareTo(in2):        " + in.compareTo(in2));
        System.out.println("Compare millisecond:  in.isEqual(in2):          " + in.isEqual(in2));
        System.out.println("Compare millisecond:  in.isAfter(in2):          " + in.isAfter(in2));
        System.out.println("Compare millisecond:  in.isBefore(in2):         " + in.isBefore(in2));
    }

    private static void runDateTime() {
        System.out.println("DateTime");
        System.out.println("=======");
        System.out
                .println("DateTime stores a the date and time using millisecs from 1970-01-01T00:00:00Z internally");
        System.out.println("DateTime is immutable and thread-safe");
        System.out.println("                      in = new DateTime()");
        DateTime in = new DateTime();
        System.out.println("Millisecond time:     in.getMillis():           " + in.getMillis());
        System.out.println("ISO string version:   in.toString():            " + in.toString());
        System.out.println("ISO chronology:       in.getChronology():       " + in.getChronology());
        System.out.println("Your time zone:       in.getDateTimeZone():     " + in.getZone());
        System.out.println("Change millis:        in.withMillis(0):         " + in.withMillis(0L));
        System.out.println("");
        System.out.println("Get year:             in.getYear():             " + in.getYear());
        System.out
                .println("Get monthOfYear:      in.getMonthOfYear():      " + in.getMonthOfYear());
        System.out.println("Get dayOfMonth:       in.getDayOfMonth():       " + in.getDayOfMonth());
        System.out.println("...");
        System.out.println("Property access:      in.dayOfWeek().get():                   "
                + in.dayOfWeek().get());
        System.out.println("Day of week as text:  in.dayOfWeek().getAsText():             "
                + in.dayOfWeek().getAsText());
        System.out.println("Day as short text:    in.dayOfWeek().getAsShortText():        "
                + in.dayOfWeek().getAsShortText());
        System.out.println("Day in french:        in.dayOfWeek().getAsText(Locale.FRENCH):"
                + in.dayOfWeek().getAsText(Locale.FRENCH));
        System.out.println("Max allowed value:    in.dayOfWeek().getMaximumValue():       "
                + in.dayOfWeek().getMaximumValue());
        System.out.println("Min allowed value:    in.dayOfWeek().getMinimumValue():       "
                + in.dayOfWeek().getMinimumValue());
        System.out.println("Copy & set to Jan:    in.monthOfYear().setCopy(1):            "
                + in.monthOfYear().setCopy(1));
        System.out.println("Copy & add 14 months: in.monthOfYear().addCopy(14):           "
                + in.monthOfYear().addToCopy(14));
        System.out.println("Add 14 mnths in field:in.monthOfYear().addWrapFieldCopy(14):  "
                + in.monthOfYear().addWrapFieldToCopy(14));
        System.out.println("...");
        System.out.println("Convert to Instant:   in.toInstant():           " + in.toInstant());
        System.out.println("Convert to DateTime:  in.toDateTime():          " + in.toDateTime());
        System.out.println("Convert to MutableDT: in.toMutableDateTime():   "
                + in.toMutableDateTime());
        System.out.println("Convert to Date:      in.toDate():              " + in.toDate());
        System.out.println("Convert to Calendar:  in.toCalendar(Locale.UK): "
                + in.toCalendar(Locale.UK).toString().substring(0, 46));
        System.out.println("Convert to GregCal:   in.toGregorianCalendar(): "
                + in.toGregorianCalendar().toString().substring(0, 46));
        System.out.println("");
        System.out.println("                      in2 = new DateTime(in.getMillis() + 10)");
        DateTime in2 = new DateTime(in.getMillis() + 10);
        System.out.println("Equals ms and chrono: in.equals(in2):           " + in.equals(in2));
        System.out.println("Compare millisecond:  in.compareTo(in2):        " + in.compareTo(in2));
        System.out.println("Compare millisecond:  in.isEqual(in2):          " + in.isEqual(in2));
        System.out.println("Compare millisecond:  in.isAfter(in2):          " + in.isAfter(in2));
        System.out.println("Compare millisecond:  in.isBefore(in2):         " + in.isBefore(in2));
    }
}

猜你喜欢

转载自blog.csdn.net/zpcandzhj/article/details/76389765