博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JodaTime初体验
阅读量:6188 次
发布时间:2019-06-21

本文共 4380 字,大约阅读时间需要 14 分钟。

前段时间用JDK自带的Calendar类来处理日期,需要获取年、季,月,星期的起始日期,被折腾得要死要活。看了这篇文章  后,决定使用JodaTime重新写一下这个功能。

关于JodaTime可以看这篇文章:

废话不多说,直接贴代码。

1 import java.util.Date; 2  3 import org.joda.time.DateTime; 4  5 public class JodaDemo { 6     public static final int PERIOD_TYPE_YEAR = 0; 7  8     public static final int PERIOD_TYPE_MONTH = 1; 9 10     public static final int PERIOD_TYPE_HALFMONTH = 2;11 12     public static final int PERIOD_TYPE_WEEK = 3;13 14     public static final int PERIOD_TYPE_BIWEEK = 4;15 16     public static final int PERIOD_TYPE_QUARTER = 5;17 18     /**19      * 根据type获取日期期间 type为月的话 则返回月初与月末两个Date20      * 21      * @param currentDate22      * @param type23      * @return24      */25     public static Date[] getPeriodByType(Date currentDate, int type) {26 27         DateTime date = new DateTime(currentDate);28         Date fromDate = currentDate;29         Date toDate = currentDate;30 31         switch (type) {32         case PERIOD_TYPE_YEAR:33             fromDate = date.dayOfYear().withMinimumValue().toDate();34             toDate = date.dayOfYear().withMaximumValue().toDate();35             break;36 37         case PERIOD_TYPE_QUARTER:38             int month = date.getMonthOfYear();39             month = (month - 1) % 3;40             date = date.plusMonths(-month);41             fromDate = date.dayOfMonth().withMinimumValue().toDate();42             date = date.plusMonths(2);43             toDate = date.dayOfMonth().withMaximumValue().toDate();44             break;45 46         case PERIOD_TYPE_MONTH:47             fromDate = date.dayOfMonth().withMinimumValue().toDate();48             toDate = date.dayOfMonth().withMaximumValue().toDate();49             break;50 51         case PERIOD_TYPE_WEEK:52             fromDate = date.dayOfWeek().withMinimumValue().toDate();53             toDate = date.dayOfWeek().withMaximumValue().toDate();54 55             break;56 57         case PERIOD_TYPE_BIWEEK:58             fromDate = date.dayOfYear().withMinimumValue().toDate();59             toDate = date.dayOfYear().withMaximumValue().toDate();60             break;61 62         case PERIOD_TYPE_HALFMONTH:63 64             fromDate = date.dayOfYear().withMinimumValue().toDate();65             toDate = date.dayOfYear().withMaximumValue().toDate();66 67             break;68 69         default:70             break;71         }72 73         Date[] period = new Date[2];74         period[0] = fromDate;75         period[1] = toDate;76         return period;77     }78 }
View Code

然后写测试:

1 import static org.junit.Assert.*; 2  3 import java.util.Date; 4  5 import org.joda.time.DateTime; 6 import org.junit.Test; 7  8  9 public class JodaDemoTest {10     public static String dateFormat = "yyyy-MM-dd";11     @Test12     public void testGetPeriodByType() {13         DateTime dateTime = new DateTime("2013-12-26");14         Date[] weeks = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_WEEK);15         assertEquals("2013-12-23", new DateTime(weeks[0]).toString(dateFormat));16         assertEquals("2013-12-29", new DateTime(weeks[1]).toString(dateFormat));17         18 //        Date[] biWeek = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_BIWEEK);19 //        assertEquals("2013-12-01", new DateTime(biWeek[0]).toString(dateFormat));20 //        assertEquals("2013-12-31", new DateTime(biWeek[1]).toString(dateFormat));21         22         Date[] months = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_MONTH);23         assertEquals("2013-12-01", new DateTime(months[0]).toString(dateFormat));24         assertEquals("2013-12-31", new DateTime(months[1]).toString(dateFormat));25         26         Date[] quarters = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_QUARTER);27         assertEquals("2013-10-01", new DateTime(quarters[0]).toString(dateFormat));28         assertEquals("2013-12-31", new DateTime(quarters[1]).toString(dateFormat));29         30         Date[] years = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_YEAR);31         assertEquals("2013-01-01", new DateTime(years[0]).toString(dateFormat));32         assertEquals("2013-12-31", new DateTime(years[1]).toString(dateFormat));33     }34 35 }
View Code

测试通过:

 

注:按两周BIWEEK分割和按半个月HALFMONTH分割的功能还没完善。

使用Joda果然简单了很多,接下来有空可以看看源码,再深入理解一下。

转载于:https://www.cnblogs.com/myfjd/p/3492888.html

你可能感兴趣的文章
linux中查找grep与find命令的使用
查看>>
惠普台式电脑重装系统仍然启动不了,怎么办
查看>>
简练软考知识点整理-云大物移智区加
查看>>
CSS动态样式---基础-控制是否添加CSS类
查看>>
27 LNMP
查看>>
35 shell脚本
查看>>
Jenkins
查看>>
systemctl和正则表达式
查看>>
2019第二届北京国际新零售及无人售货展览会
查看>>
90后告别第一份工作后,更青睐新一线城市开启职场第二步
查看>>
隨身碟檔案救援軟體救援刪除的檔案/丟失的資料
查看>>
Qt部件学习之-烧鹅
查看>>
如何删除后缀.Tater勒索病毒并解密.tater勒索病毒加密的病毒文件
查看>>
Python与C++引用分析
查看>>
ssh日志记录
查看>>
OSPF与EIGRP的比较
查看>>
Oracle SQL性能调整注意事项
查看>>
细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文
查看>>
ruby 基础知识(一)
查看>>
Linux系统启动简单流程:
查看>>