JodaTime初体验
前段时间用JDK自带的Calendar类来处理日期,需要获取年、季,月,星期的起始日期,被折腾得要死要活。看了这篇文章 http://www.blogbus.com/dreamhead-logs/226738702.html 后,决定使用JodaTime重新写一下这个功能。
关于JodaTime可以看这篇文章:http://www.ibm.com/developerworks/cn/java/j-jodatime.html
废话不多说,直接贴代码。
import java.util.Date;
import org.joda.time.DateTime;
public class JodaDemo {
public static final int PERIOD_TYPE_YEAR = 0;
public static final int PERIOD_TYPE_MONTH = 1;
public static final int PERIOD_TYPE_HALFMONTH = 2;
public static final int PERIOD_TYPE_WEEK = 3;
public static final int PERIOD_TYPE_BIWEEK = 4;
public static final int PERIOD_TYPE_QUARTER = 5;
/**
* 根据type获取日期期间 type为月的话 则返回月初与月末两个Date
*
* @param currentDate
* @param type
* @return
*/
public static Date[] getPeriodByType(Date currentDate, int type) {
DateTime date = new DateTime(currentDate);
Date fromDate = currentDate;
Date toDate = currentDate;
switch (type) {
case PERIOD_TYPE_YEAR:
fromDate = date.dayOfYear().withMinimumValue().toDate();
toDate = date.dayOfYear().withMaximumValue().toDate();
break;
case PERIOD_TYPE_QUARTER:
int month = date.getMonthOfYear();
month = (month - 1) % 3;
date = date.plusMonths(-month);
fromDate = date.dayOfMonth().withMinimumValue().toDate();
date = date.plusMonths(2);
toDate = date.dayOfMonth().withMaximumValue().toDate();
break;
case PERIOD_TYPE_MONTH:
fromDate = date.dayOfMonth().withMinimumValue().toDate();
toDate = date.dayOfMonth().withMaximumValue().toDate();
break;
case PERIOD_TYPE_WEEK:
fromDate = date.dayOfWeek().withMinimumValue().toDate();
toDate = date.dayOfWeek().withMaximumValue().toDate();
break;
case PERIOD_TYPE_BIWEEK:
fromDate = date.dayOfYear().withMinimumValue().toDate();
toDate = date.dayOfYear().withMaximumValue().toDate();
break;
case PERIOD_TYPE_HALFMONTH:
fromDate = date.dayOfYear().withMinimumValue().toDate();
toDate = date.dayOfYear().withMaximumValue().toDate();
break;
default:
break;
}
Date[] period = new Date[2];
period[0] = fromDate;
period[1] = toDate;
return period;
}
}
然后写测试:
import static org.junit.Assert.*; import java.util.Date; import org.joda.time.DateTime;
import org.junit.Test; public class JodaDemoTest {
public static String dateFormat = "yyyy-MM-dd";
@Test
public void testGetPeriodByType() {
DateTime dateTime = new DateTime("2013-12-26");
Date[] weeks = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_WEEK);
assertEquals("2013-12-23", new DateTime(weeks[0]).toString(dateFormat));
assertEquals("2013-12-29", new DateTime(weeks[1]).toString(dateFormat)); // Date[] biWeek = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_BIWEEK);
// assertEquals("2013-12-01", new DateTime(biWeek[0]).toString(dateFormat));
// assertEquals("2013-12-31", new DateTime(biWeek[1]).toString(dateFormat)); Date[] months = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_MONTH);
assertEquals("2013-12-01", new DateTime(months[0]).toString(dateFormat));
assertEquals("2013-12-31", new DateTime(months[1]).toString(dateFormat)); Date[] quarters = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_QUARTER);
assertEquals("2013-10-01", new DateTime(quarters[0]).toString(dateFormat));
assertEquals("2013-12-31", new DateTime(quarters[1]).toString(dateFormat)); Date[] years = JodaDemo.getPeriodByType(dateTime.toDate(), JodaDemo.PERIOD_TYPE_YEAR);
assertEquals("2013-01-01", new DateTime(years[0]).toString(dateFormat));
assertEquals("2013-12-31", new DateTime(years[1]).toString(dateFormat));
} }
测试通过:
注:按两周BIWEEK分割和按半个月HALFMONTH分割的功能还没完善。
使用Joda果然简单了很多,接下来有空可以看看源码,再深入理解一下。
JodaTime初体验的更多相关文章
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
随机推荐
- 【个人笔记】001-PHP基础-01-PHP快速入门-01-PHP职业路线及PHP前景
001-PHP基础-01-PHP快速入门 01-PHP职业路线及PHP前景 PHP职业路线 PHP初级工程师 1年以下 3k-6k PHP中级工程师 1-3年6k-10k PHP高级工程师 3年以上 ...
- 30款jQuery常用网页焦点图banner图片切换 下载
1.jquery 图片滚动特效制作 slide 图片类似窗帘式图片滚动 查看演示 2.jquery幻灯片插件带滚动条的圆形立体图片旋转滚动 查看演示 3.jQuery图片层叠旋转类似洗牌翻转图片幻灯片 ...
- bnuoj 4208 Bubble sort
http://www.bnuoj.com/bnuoj/problem_show.php?pid=4208 [题意]:如题,求冒泡排序遍历趟数 [题解]:这题开始2B了,先模拟TLE,然后想了一下,能不 ...
- 【转】 Android经验: proguard 阻碍 webview 正常工作
转自:http://blog.csdn.net/span76/article/details/9065941 WebView 常识 使用 Alert 提供消息 我在页面经常用 Alert 提供消息, ...
- 想成为真正的代码gg,目标
转眼已而大二了,可是在这上了一个星期的课,感觉生活非常的茫然.当然这与我处在的环境有一定的关系. 处在这样的学校,想努力可是让我心凉的是没有一个老师肯真心带学生,, 学校办的各种事情都很坑,,我不怕自 ...
- 我的第一个python爬虫程序
程序用来爬取糗事百科上的图片的,程序设有超时功能,具有异常处理能力 下面直接上源码: #-*-coding:utf-8-*- ''' Created on 2016年10月20日 @author: a ...
- Application、Session、Cookie、ViewState的特性
http://blog.csdn.net/zyw_anquan/article/details/7664132 Application的特性: 存储的物理位置:服务器端内存. 存储的类型限制:任意 ...
- JSP/SERVLET重定向技术综述
1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个S ...
- pureftpd安装配置-pureftp参数详解(一)
1. 下载 #cd /usr/local/src/ #wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.30.tar.g ...
- 【ACMER纷纷表示】女生应该找一个玩ACM的男生
1.强烈的事业心 将来,他也一定会有自己热爱的事业.而且,男人最性感的时刻之一,就是他专心致志做事的时候.所以,找一个机会在他全神贯注玩ACM的时候,从侧面好好观察他,你就会发现我说的话没错.2.永不 ...