JODA-TIME

最近在做一个数据统计的需求,需要多种对时间的计算。由于Calendar对时间的计算实在是过于复杂繁琐,因此就想寻求一种比较简单粗暴的方式。很幸运,找到了joda。下面是一些代码实例。

/**
设置一个日期对象
*/
public void setADate() {
//利用jdk的Calendar对象
Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.JANUARY, 18, 10, 32, 0);
//利用joda
DateTime dateTime = new DateTime(2019,1,18,10,32,0,0);
}
/**
获取当前日期的前5天br/>*/
@Test
public void getTheDay5BeforeNow() {
//利用jdk的Calendar对象
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE,-5);
Date date = calendar.getTime();
System.out.println(simpleDateFormat.format(date));
//利用joda
DateTime dateTime = new DateTime();
System.out.println(dateTime.minusDays(5).toString("yyyy-MM-dd HH:mm:ss",Locale.CHINESE));
}
/**
获取当前时间的后五天br/>*/
@Test
public void getTheDay5AfterNow() {
//利用jdk的Calendar对象
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE,5);
Date date = calendar.getTime();
System.out.println(simpleDateFormat.format(date));
//利用joda
DateTime dateTime = new DateTime();
System.out.println(dateTime.plusDays(5).toString("yyyy-MM-dd HH:mm:ss",Locale.CHINESE));
}

可以看出,利用joda确实是比calendar快了很多,类似的获取当前时间的后几个月有plusMonths(),后几年plusYears(),后几个小时plusHours()等等甚至可以精确到毫秒。若要获取之前的时间,只需要将plus换成minus即可。br/>当然joda的计算功能远不止如此,它可以很灵活的计算出任何你想要的或者想进行对比的时间。看下面这个例子。

@Test
public void demoOthers() {
String formatString = "yyyy-MM-dd HH:mm:ss";

     DateTime dateTime = new DateTime();
    // 获取当前时间月的第一天
    LocalDate firstDayOfMonth = dateTime.toLocalDate().withDayOfMonth(1);
    System.out.println("本月第一天日期:"+ firstDayOfMonth.toString(formatString,Locale.CHINESE));

    // 获取当前周的周一和周末
    LocalDate firstDayOfWeek = dateTime.toLocalDate().withDayOfWeek(1);
    LocalDate lastDayOfWeek = dateTime.toLocalDate().withDayOfWeek(7);
    System.out.println("本周第一天日期:"+ firstDayOfWeek.toString(formatString,Locale.CHINESE));
    System.out.println("本周最后一天日期:"+ lastDayOfWeek.toString(formatString,Locale.CHINESE));

    // 当前月的第一天和最后一天
    DateTime firstDayOfCurrentMonth = dateTime.dayOfMonth().withMinimumValue();
    DateTime lastDayOfCurrentMonth = dateTime.dayOfMonth().withMaximumValue();
    System.out.println("本月第一天日期:"+ firstDayOfCurrentMonth.toString(formatString,Locale.CHINESE));
    System.out.println("本月最后一天日期:"+ lastDayOfCurrentMonth.toString(formatString,Locale.CHINESE));

    // 当前年的第一天和最后一天
    DateTime firstDayOfCurrentYear = dateTime.dayOfYear().withMinimumValue();
    DateTime lastDayOfCurrentYear = dateTime.dayOfYear().withMaximumValue();
    System.out.println("本年第一天日期:"+ firstDayOfCurrentYear.toString(formatString,Locale.CHINESE));
    System.out.println("本年最后一天日期:"+ lastDayOfCurrentYear.toString(formatString,Locale.CHINESE));

    DateTime begin = new DateTime(1994, 10, 1, 0, 0, 0,0);
    Duration duration = new Duration(begin, dateTime);

    // 两个时间之间 所差秒
    System.out.println(begin.toString(formatString) + " 与 "  + dateTime.toString(formatString) + " 相差的秒:" + duration.getStandardSeconds());
    //计算区间天数  ,小时,秒
    Period p = new Period(new DateTime(1994, 10, 1, 0, 0, 0,0),new DateTime(), PeriodType.days());
    System.out.println("相隔的天:"+p.getDays());

    // 计算之前月份的时间操作
    LocalDate d = new DateTime().toLocalDate();
    // 上个月(可以是之前的任意月)的最后一天
    LocalDate lastDayOfPreviousMonth = d.minusMonths(1).dayOfMonth().withMaximumValue();

    LocalDate.Property e = d.minusWeeks(1).dayOfWeek();
    System.out.println("上周的周一:" + e.withMinimumValue().toString(formatString, Locale.CHINESE));
    System.out.println("上周的周日:" + e.withMaximumValue().toString(formatString, Locale.CHINESE));

    //汉字形式标识今年和去年时间
    System.out.println("汉字形式:" + dateTime.minusYears(0).year().getAsText(Locale.CHINESE));
    System.out.println("汉字形式:" + dateTime.minusYears(1).monthOfYear().getAsText(Locale.CHINESE));
    System.out.println("汉字形式:"+ dateTime.minusYears(1).dayOfMonth().getAsText(Locale.CHINESE));
    System.out.println("汉字形式:" + dateTime.minusYears(1).dayOfWeek().getAsText(Locale.CHINESE));

    // 判断是否是闰年 闰月
    System.out.println("是否闰月:" + dateTime.monthOfYear().isLeap());
    System.out.println("是否闰年:" + dateTime.year().isLeap());
    System.out.println("去年是否闰年:" + dateTime.minusYears(1).year().isLeap());

    //获取现在距离今天结束还有多久时间
    System.out.println( dateTime.millisOfDay().withMaximumValue().getMillis() - dateTime.getMillis());

    //10 天后 那周的周一是
    System.out.println("十天后的那周的周一是:" + dateTime.plusDays(10).dayOfWeek().withMinimumValue().toString(formatString));

    // DateTime与java.util.Date对象,当前系统TimeMillis转换
    DateTime temp1 = new DateTime(new Date());
    Date temp2 = dateTime.toDate();
    DateTime temp3 = new DateTime(System.currentTimeMillis());

    Calendar calendar = Calendar.getInstance();
    DateTime  temp4 = new DateTime(calendar);
}

总之,这个joda用起来比较快速,也比较灵活。是一个上手很快的工具。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Joda-Time 是一个 Java 编程语言的日期和时间处理库,它提供了简化日期和时间操作的功能。使用 Joda-Time,你可以轻松地进行日期和时间计算、格式化、解析等操作。 下面是 Joda-Time 的一些常见用法: 1. 创建日期对象: ```java DateTime now = new DateTime(); // 创建当前日期和时间对象 DateTime specificDate = new DateTime(2022, 1, 1, 0, 0, 0); // 创建指定日期和时间对象 ``` 2. 获取日期和时间的各个部分: ```java int year = now.getYear(); // 获取年份 int month = now.getMonthOfYear(); // 获取月份 int day = now.getDayOfMonth(); // 获取日期 int hour = now.getHourOfDay(); // 获取小时 int minute = now.getMinuteOfHour(); // 获取分钟 int second = now.getSecondOfMinute(); // 获取秒数 ``` 3. 格式化日期和时间: ```java String formattedDate = now.toString("yyyy-MM-dd"); // 将日期格式化为指定格式的字符串 String formattedTime = now.toString("HH:mm:ss"); // 将时间格式化为指定格式的字符串 String formattedDateTime = now.toString("yyyy-MM-dd HH:mm:ss"); // 将日期和时间格式化为指定格式的字符串 ``` 4. 解析字符串为日期对象: ```java DateTime parsedDate = DateTime.parse("2022-01-01"); // 解析字符串为日期对象 ``` 5. 对日期进行计算和操作: ```java DateTime modifiedDate = now.plusDays(7); // 将日期加上指定天数 DateTime result = now.minusYears(1).plusMonths(3); // 对日期进行复合操作 ``` 以上是 Joda-Time 的一些基本用法,你可以根据自己的需求进一步探索该工具类的其他功能。请注意,Joda-Time 在 Java 8 及更高版本中已经被官方的 java.time 包所取代,因此在使用新的 Java 版本时,你可以直接使用 java.time 包中的类来处理日期和时间

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值