Joda-Time 工具类使用

阅读更多
Joda-time 简单出来时间库。
导入maven 工程jar包

	    joda-time
	    joda-time
	    2.9.2
	


package com.downjoy.date;

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

import org.eclipse.jdt.internal.compiler.ast.SuperReference;
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;
import org.joda.time.DateTimeZone;
import org.joda.time.Duration;
import org.joda.time.Interval;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.joda.time.Period;
import org.joda.time.PeriodType;


public class JodaTimeTest {
	
	
	//方法一:取系统点间  
	DateTime dt1 = new DateTime(); 	
	//方法二:通过java.util.Date对象生成  
	DateTime dt2 = new 	DateTime(new Date());	
	//方法三:指定年月日点分秒生成(参数依次是:年,月,日,时,分,秒,毫秒)  
	static DateTime dt3 = new DateTime(2016, 6, 15, 14, 47, 0, 0);
	//方法四:ISO8601形式生成  
	DateTime dt4 = new DateTime("2016-06-15");  
	DateTime dt5 = new DateTime("2016-06-20T13:14:00"); 
	//只需要年月日的时候  
	LocalDate ld1 = new LocalDate(2016, 6, 15);
	//只需要时分秒毫秒的时候  
	LocalTime localTime = new LocalTime(13, 30, 26, 0);// 1:30:26PM  
	
	DateTime dt = new DateTime();
	int year = dt.getYear();//年
	int month = dt.getMonthOfYear();//月
	int day = dt.getDayOfMonth(); //天
	int day1 = dt.getDayOfWeek();//天
	int day2 = dt.getDayOfYear();//天
	int week = dt.getDayOfWeek(); //星期   
	int hour = dt.getHourOfDay(); 	//点   
	int min = dt.getMinuteOfHour();  //分  
	int sec = dt.getSecondOfMinute();  //秒  
	int msec = dt.getMillisOfSecond();	//毫秒    

	@Override
	public String toString() {
		System.out.println(year+","+month+","+day+","+day1+","+day2+","+week+","+hour+","+min+","+sec+","+msec);	
		return "";
	}
	public void week(){
		//星期
		DateTime dts = new DateTime(); 
		switch (dts.getDayOfWeek()) {
		case DateTimeConstants.SUNDAY:
			System.out.println("星期日");
			break;
			
		case DateTimeConstants.MONDAY:
			System.out.println("星期一");
			break;
			
		case DateTimeConstants.TUESDAY:
			System.out.println("星期二");
			break;
		case DateTimeConstants.WEDNESDAY:
			System.out.println("星期三");	
			break;
		case DateTimeConstants.THURSDAY:
			System.out.println("星期四");
			break;
		case DateTimeConstants.FRIDAY:
			System.out.println("星期五");
			break;
		case DateTimeConstants.SATURDAY:
			System.out.println("星期6");
		default:
			break;
		}
		
		
	}
	
	public static void main(String[] args) {
	JodaTimeTest jodaTime =new  JodaTimeTest();
//		jodaTime.toString();
//		System.out.println(dt3);
		//转换成java.util.Date对象 
		DateTime datetime = new DateTime();
		Date d1 = new Date(datetime.getMillis());
		Date d2 = datetime.toDate();  
		//转换成java.util.Calendar对象  
		Calendar c1 = Calendar.getInstance();
		c1.setTimeInMillis(datetime.getMillis());
		Calendar c2 = datetime.toCalendar(Locale.getDefault());
		jodaTime.week();
		System.out.println(d1);
		System.out.println(d2);
		System.out.println(c1.getTimeInMillis());
		System.out.println(datetime);
		String s1 = datetime.toString("yyyy/MM/dd hh:mm:ss.SSSa");  //2016/06/15 04:12:22.012下午
		String s2 = datetime.toString("yyyy-MM-dd HH:mm:ss");  //2016-06-15 16:12:22
		String s3 = datetime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");  //星期三 15 六月, 2016 16:12:22下午
		String s4 = datetime.toString("yyyy/MM/dd HH:mm ZZZZ");  //2016/06/15 16:12 +08:00
		String s5 = datetime.toString("yyyy/MM/dd HH:mm Z");  //2016/06/15 16:12 +0800
		System.out.println(s1+"/n"+s2+"/n"+s3+"/n"+s4+"/n"+s5);
		
	}
	DateTime dt01 = new DateTime();  
	  
	//昨天  
	DateTime yesterday = dt01.minusDays(1);         
	//明天  
	DateTime tomorrow = dt01.plusDays(1);       
	//1个月前  
	DateTime before1month = dt01.minusMonths(1);        
	//3个月后  
	DateTime after3month = dt01.plusMonths(3);          
	//2年前  
	DateTime before2year = dt01.minusYears(2);          
	//5年后  
	DateTime after5year = dt01.plusYears(5); 
	
	DateTime d1 = new DateTime("2012-02-01");  
	DateTime d2 = new DateTime("2012-05-01");  
	  
	//和系统时间比  
	boolean b1 = d1.isAfterNow();  
	boolean b2 = d1.isBeforeNow();  
	boolean b3 = d1.isEqualNow();  
	  
	//和其他日期比  
	boolean f1 = d1.isAfter(d2);  
	boolean f2 = d1.isBefore(d2);  
	boolean f3 = d1.isEqual(d2);  
	
	
	DateTime begin = new DateTime("2012-02-01");  
	DateTime end = new DateTime("2012-05-01");  
	  
	//计算区间毫秒数  
	Duration d = new Duration(begin, end);  
	long time = d.getMillis();  
	  
	//计算区间天数  
	Period p = new Period(begin, end, PeriodType.days());  
	int days = p.getDays();  
	  
	//计算特定日期是否在该区间内  
	Interval i = new Interval(begin, end);  
	boolean contained = i.contains(new DateTime("2012-03-01"));  
	
	//默认设置为日本时间  
	
	DateTime dt001 = new DateTime();  
	  
	//伦敦时间  
	DateTime dt002 = new DateTime(DateTimeZone.forID("Europe/London"));  
	//月末日期    
	DateTime lastday = dt.dayOfMonth().withMaximumValue();  
	  
	//90天后那周的周一  
	DateTime firstday = dt.plusDays(90).dayOfWeek().withMinimumValue(); 
	
}

引用的 http://rensanning.iteye.com/blog/1546652

DateUtils 工具类:JodaTime   对时间的加减 处理起来 特别方便 ,快速。自己在工作写了一下公用的方法。



package com.jiayu.pingxing.core.common;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.*;

import javax.annotation.Nullable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;

/**
 * 

*

*

* Created by Zw(小猫) * Date: 17/3/17. */ public class DateUtils { public static final long SECOND = 1000; //1秒 java已毫秒为单位 public static final long MINUTE = SECOND * 60; //一分钟 public static final long HOUR = MINUTE * 60; // 一小时 public static final long DAY = HOUR * 24; //一天 public static final long WEEK = DAY * 7; //一周 public static final long YEAR = DAY * 365; //一年 public static final String FORMAT_TIME = "yyyy-MM-dd HH:mm:ss"; //默认时间格式 public static final String FORMAT_TIME_MINUTE = "yyyy-MM-dd HH:mm"; //默认时间格式 public static final String FORTER_DATE = "yyyy-MM-dd"; //默认日期格式 private static final Map WEEK_DAY = new HashMap(); static { WEEK_DAY.put(7, "星期六"); WEEK_DAY.put(1, "星期天"); WEEK_DAY.put(2, "星期一"); WEEK_DAY.put(3, "星期二"); WEEK_DAY.put(4, "星期三"); WEEK_DAY.put(5, "星期四"); WEEK_DAY.put(6, "星期五"); } /** * 获取当前系统时间 * @return yyyy-MM-dd HH:mm:ss */ public static String getCurrentTime() { DateTime dt = new DateTime(); String time = dt.toString(FORMAT_TIME); return time; } /** * 获取系统当前时间按照指定格式返回 * @param pattern yyyy/MM/dd hh:mm:a * @return */ public static String getCurrentTimePattern(String pattern) { DateTime dt = new DateTime(); String time = dt.toString(pattern); return time; } /** * 获取当前日期 * @return */ public static String getCurrentDate() { DateTime dt = new DateTime(); String date = dt.toString(FORTER_DATE); return date; } /** * 获取当前日期按照指定格式 * @param pattern * @return */ public static String getCurrentDatePattern(String pattern) { DateTime dt = new DateTime(); String date = dt.toString(pattern); return date; } /** * 按照时区转换时间 * @param date * @param timeZone 时区 * @param parrten * @return */ @Nullable public static String format(Date date, TimeZone timeZone, String parrten) { if (date == null) { return null; } SimpleDateFormat sdf = new SimpleDateFormat(parrten); sdf.setTimeZone(timeZone); return sdf.format(date); } /** * 获取指定时间 * @param year 年 * @param month 月 * @param day 天 * @param hour 小时 * @param minute 分钟 * @param seconds 秒 * @return yyyy-MM-dd HH:mm:ss */ public static String getPointTime(Integer year, Integer month, Integer day, Integer hour, Integer minute, Integer seconds) { DateTime dt = new DateTime(year, month, day, hour, minute, seconds); String date = dt.toString(FORMAT_TIME); return date; } /** * * @param year 年 * @param month 月 * @param day 天 * @param hour 小时 * @param minute 分钟 * @param seconds 秒 * @param parrten 自定义格式 * @return parrten */ public static String getPointTimePattern(Integer year, Integer month, Integer day, Integer hour, Integer minute, Integer seconds, String parrten) { DateTime dt = new DateTime(year, month, day, hour, minute, seconds); String date = dt.toString(parrten); return date; } /** * 获取指定日期 * @param year * @param month * @param day * @return */ public static String getPointDate(Integer year, Integer month, Integer day) { LocalDate dt = new LocalDate(year, month, day); String date = dt.toString(FORTER_DATE); return date; } /** * 获取指定日期 返回指定格式 * @param year * @param month * @param day * @param parrten * @return */ public static String getPointDatParrten(Integer year, Integer month, Integer day, String parrten) { LocalDate dt = new LocalDate(year, month, day); String date = dt.toString(parrten); return date; } /** * 获取当前是一周星期几 * @return */ public static String getWeek() { DateTime dts = new DateTime(); String week = null; switch (dts.getDayOfWeek()) { case DateTimeConstants.SUNDAY: week = "星期日"; break; case DateTimeConstants.MONDAY: week = "星期一"; break; case DateTimeConstants.TUESDAY: week = "星期二"; break; case DateTimeConstants.WEDNESDAY: week = "星期三"; break; case DateTimeConstants.THURSDAY: week = "星期四"; break; case DateTimeConstants.FRIDAY: week = "星期五"; break; case DateTimeConstants.SATURDAY: week = "星期六"; default: break; } return week; } /** * 获取指定时间是一周的星期几 * @param year * @param month * @param day * @return */ public static String getWeekPoint(Integer year, Integer month, Integer day) { LocalDate dts = new LocalDate(year, month, day); String week = null; switch (dts.getDayOfWeek()) { case DateTimeConstants.SUNDAY: week = "星期日"; break; case DateTimeConstants.MONDAY: week = "星期一"; break; case DateTimeConstants.TUESDAY: week = "星期二"; break; case DateTimeConstants.WEDNESDAY: week = "星期三"; break; case DateTimeConstants.THURSDAY: week = "星期四"; break; case DateTimeConstants.FRIDAY: week = "星期五"; break; case DateTimeConstants.SATURDAY: week = "星期六"; break; default: break; } return week; } /** * 格式化日期 * @param date * @return yyyy-MM-dd HH:mm:ss */ @Nullable public static String format(Date date) { if (date == null) { return null; } SimpleDateFormat format = new SimpleDateFormat(FORMAT_TIME); return format.format(date); } /** * 格式化日期字符串 * @param date 日期 * @param pattern 日期格式 * @return */ @Nullable public static String format(Date date, String pattern) { if (date == null) { return null; } SimpleDateFormat format = new SimpleDateFormat(pattern); return format.format(date); } /** * 解析日期 * @param date 日期字符串 * @param pattern 日期格式 * @return */ @Nullable public static Date parse(String date, String pattern) { if (date == null) { return null; } Date resultDate = null; try { resultDate = new SimpleDateFormat(pattern).parse(date); } catch (ParseException e) { } return resultDate; } /** * 解析日期yyyy-MM-dd HH:mm:ss * @param date 日期字符串 * @return */ @Nullable public static Date parse(String date) { if (date == null) { return null; } try { return new SimpleDateFormat(FORMAT_TIME).parse(date); } catch (ParseException e) { return null; } } /** * 解析日期 yyyy-MM-dd HH:mm:ss * @param timestamp * @return */ public static String format(Long timestamp, String pattern) { String dateStr = ""; if (null == timestamp || timestamp.longValue() < 0) { return dateStr; } try { Date date = new Date(timestamp); SimpleDateFormat format = new SimpleDateFormat(pattern); dateStr = format.format(date); } catch (Exception e) { // ignore } return dateStr; } /** * 解析日期 yyyy-MM-dd HH:mm:ss * @param timestamp * @return */ public static String format(Long timestamp) { String dateStr = ""; if (null == timestamp || timestamp.longValue() < 0) { return dateStr; } try { Date date = new Date(timestamp); SimpleDateFormat format = new SimpleDateFormat(FORMAT_TIME); dateStr = format.format(date); } catch (Exception e) { // ignore } return dateStr; } /** *获取当前时间前几天时间,按指定格式返回 * @param days * @return */ public static String forwardDay(Integer days, String format) { DateTime dt = new DateTime(); DateTime y = dt.minusDays(days); return y.toString(format); } /** *获取当前时间前几天时间 * @param days * @return */ public static Date forwardDay(Integer days) { DateTime dt = new DateTime(); DateTime y = dt.minusDays(days); return y.toDate(); } /** * 获取指定时间之后或者之前的某一天00:00:00 默认返回当天 * @param days * @return */ public static Date day00(Integer days, String date, String zimeZone) throws Throwable { DateTime dt; TimeZone timeZone; try { if (StringUtils.isBlank(zimeZone)) { timeZone = TimeZone.getDefault(); } else { timeZone = TimeZone.getTimeZone(zimeZone); } if (StringUtils.isBlank(date)) { dt = new DateTime().withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime(); } else { dt = new DateTime(date).withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime(); } } catch (Exception e) { throw new Throwable(e); } DateTime y = dt.minusDays(days).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0); return y.toDate(); } /** *获取指定时间之后或者之前的某一天23:59:59 默认返回当天 * @param days 偏移量 * @return */ public static Date day59(Integer days, String date, String zimeZone) throws Throwable { DateTime dt; TimeZone timeZone; try { if (StringUtils.isBlank(zimeZone)) { timeZone = TimeZone.getDefault(); } else { timeZone = TimeZone.getTimeZone(zimeZone); } if (StringUtils.isBlank(date)) { dt = new DateTime().withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime(); } else { dt = new DateTime(date).withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime(); } } catch (Exception e) { throw new Throwable(e); } DateTime y = dt.minusDays(days).withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59); return y.toDate(); } /** * 计算两个时间相差多少天 * @param startDate * @param endDate * @return */ @Nullable public static Integer diffDay(Date startDate, Date endDate) { if (startDate == null || endDate == null) { return null; } DateTime dt1 = new DateTime(startDate); DateTime dt2 = new DateTime(endDate); int day = Days.daysBetween(dt1, dt2).getDays(); return Math.abs(day); } /** * 获取某月之前,之后某一个月最后一天,24:59:59 * @return */ public static Date lastDay(Date date, Integer month) { DateTime dt1; if (month == null) { month = 0; } if (date == null) { dt1 = new DateTime().minusMonths(month); } else { dt1 = new DateTime(date).minusMonths(month); } DateTime lastDay = dt1.dayOfMonth().withMaximumValue(). withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59); return lastDay.toDate(); } /** *获取某月月之前,之后某一个月第一天,00:00:00 * @return */ public static Date firstDay(Date date, Integer month) { DateTime dt1; if (month == null) { month = 0; } if (date == null) { dt1 = new DateTime().minusMonths(month); } else { dt1 = new DateTime(date).minusMonths(month); } DateTime lastDay = dt1.dayOfMonth().withMinimumValue(). withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0); return lastDay.toDate(); } public static Date addDay(Date date, int offset) { DateTime dt1; if (date == null) { dt1 = new DateTime().plusDays(offset); return dt1.toDate(); } dt1 = new DateTime(date).plusDays(offset); return dt1.toDate(); } /** * 传入日期时间与当前系统日期时间的比较, * 若日期相同,则根据时分秒来返回 , * 否则返回具体日期 * @return 日期或者 xx小时前||xx分钟前||xx秒前 */ @Nullable public static String getNewUpdateDateString(Date now, Date createDate) { if (now == null || createDate == null) { return null; } Long time = (now.getTime() - createDate.getTime()); if (time > (24 * 60 * 60 * 1000)) { return time / (24 * 60 * 60 * 1000) + "天前"; } else if (time > (60 * 60 * 1000)) { return time / (60 * 60 * 1000) + "小时前"; } else if (time > (60 * 1000)) { return time / (60 * 1000) + "分钟前"; } else if (time >= 1000) { return time / 1000 + "秒前"; } return "刚刚"; } public static void main(String[] args) throws Throwable { // System.out.println(format(day00(1,null))); // System.out.println(format(day59(1,null))); // System.out.println(lastDay(new Date(),2)); // System.out.println(firstDay(null,0)); // TimeZone zone1=TimeZone.getTimeZone("GMT+8"); // TimeZone zone2=TimeZone.getTimeZone("GMT-5"); // System.out.println(format(new Date(),zone1,FORMAT_TIME)); // System.out.println(format(new Date(),zone2,FORMAT_TIME)); // // System.out.println(format(day00(0,"2017-5-11","GMT+0"))); // System.out.println(format(day00(0,"2017-5-11","GMT+8"))); // System.out.println(format(day00(0,"2017-5-11","GMT-8"))); // Date date1 =parse("2017-05-11 17:53:52"); // // System.out.println(diffDay(date1,new Date())); // DateTime dateTime = new DateTime().withDayOfWeek(1); // // DateTime dateTime1 = new DateTime().withDayOfWeek(7).withTime(0, 0, 0, 0); // System.out.println(format(dateTime.toDate())); // // System.out.println(format(dateTime1.toDate())); System.out.println(format(new Date(),"MM/dd")); } }


你可能感兴趣的:(java)