Joda-Time 操作常用時間函數

 Joda-Tome 這個開源的東東 確實比jdk自帶的時間函數比較好用,由於目前好多項目還在沿用jdk1.8 以下的所以終於找時間吧項目中用到的關於這個的調用方法整理下

  我直接貼代碼了

  

package com.hhx.offline_tools;

import java.nio.channels.NonWritableChannelException;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Duration;
import org.joda.time.Interval;
import org.joda.time.LocalDate;
import org.joda.time.LocalDate.Property;
import org.joda.time.Period;
import org.joda.time.PeriodType; 

/**
 * 第三方時間處理類
 * 
 * @author 清水賢人
 *
 */
public class JodaTime {
	
	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); 
	
	/**
	 * 初始化方法
	 * 1、參的構造方法會創建一個在當前系統所在時區的當前時間,精確到毫秒 2017-03-15T12:31:33.517+08:00
	 * 2、DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour)根據傳入的時間構造
	 * 3、DateTime(long instant) 這個構造方法創建出來的實例,是通過一個long類型的時間戳,它表示這個時間戳距1970-01-01T00:00:00Z的毫秒數。使用默認的時區
	 * 4、DateTime(Object instant) 這個構造方法可以通過一個Object對象構造一個實例。這個Object對象可以是這些類型
	 */
    private static void useCaseOne(){
    	
    	DateTime dt = new DateTime(); 
    	DateTime dt1 = new DateTime(2017,12,12,12,12,8);
    	DateTime dt2 = new DateTime(1487473917004L);
    	DateTime dt3 = new DateTime(new Date());
    	DateTime dt4 = new DateTime("2017-03-15T12:22:22");
    	//格式化數據     輸出: 2017年03月16日 13:53:42 星期四
       System.out.println(dt.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE)); 
    	
    }
    
    /**
     * 涉及時間計算
     */
    private static void useCaseWith(){
    	
    	DateTime dt = new DateTime();
    	// 獲取當前時間月的第一天
    	LocalDate firstDayOfMonth = dt.toLocalDate().withDayOfMonth(1);  
    	
    	// 獲取當前周的週一和週末
    	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("yyyy-MM-dd"),DateTime.now().dayOfMonth().withMaximumValue().toString("yyyy-MM-dd")));  
   
        // 當前年的第一天和最後一天  
        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")));     
       
        // 10天后的日期
        System.out.println(DateTime.now().dayOfYear().addToCopy(10).toString(FORMATE_DATE)); 
        System.out.println(DateTime.now().plusDays(10).toString(FORMATE_DATE)); 
        
        // 10天前的日期
        System.out.println(DateTime.now().minusDays(10).toString(FORMATE_DATE)); 
        
        // 當前時間的10小時之前的時間
        System.out.println(DateTime.now().minusHours(10).toString(FORMATE_DATE)); 
        
        //取前幾秒的時間
        System.out.println( dt.secondOfMinute().addToCopy(-3));    
 
       
        DateTime begin = new DateTime(2017, 3, 1, 11, 13, 40); 
        Duration duration = new Duration(begin, dt); 
       
        // 兩個時間之間 所差 天,小時 ,分,秒
        System.out.println( begin.toString(FORMATE_FULL) + " 與 " + dt.toString(FORMATE_FULL) + " 相差的天數:" + duration.getStandardDays());  
        System.out.println(begin.toString(FORMATE_FULL) + " 與 "  + dt.toString(FORMATE_FULL) + " 相差的小時數:" + duration.getStandardHours()); 
        System.out.println(begin.toString(FORMATE_FULL) + " 與 "  + dt.toString(FORMATE_FULL) + " 相差的分鐘:" + duration.getStandardMinutes()); 
        System.out.println(begin.toString(FORMATE_FULL) + " 與 "  + dt.toString(FORMATE_FULL) + " 相差的秒:" + duration.getStandardSeconds()); 
        //計算區間天數  ,小時,秒
        Period p = new Period(new DateTime(2017, 1, 1, 0, 0, 0),new DateTime(2017, 3, 30, 0, 0, 0), PeriodType.days());  
        System.out.println("相隔的天:"+p.getDays()); 
        
        
        // 計算兩個日期相差幾天 (同上面方法)
        System.out.println("Days.daysBetween:"+ Days.daysBetween(DateTime.parse("2017-03-16"), DateTime.parse("2017-04-02")).getDays());  
        
        // 計算之前月份的時間操作
        LocalDate d = LocalDate.now();  
        
        // 上個月(可以是之前的任意月)的最後一天
        LocalDate lastDayOfPreviousMonth = d.minusMonths(1).dayOfMonth().withMaximumValue();  
        
        
        Property e = d.minusWeeks(1).dayOfWeek();  
        System.out.println("上週的週一:" + e.withMinimumValue().toString(FORMATE_DATE, Locale.CHINESE));  
        System.out.println("上週的週日:" + e.withMaximumValue().toString(FORMATE_DATE, Locale.CHINESE));  
        
        //漢字形式標識今年和去年時間
        System.out.println("漢字形式:" + dt.minusYears(0).year().getAsText(Locale.CHINESE));
        System.out.println("漢字形式:" + dt.minusYears(1).monthOfYear().getAsText(Locale.CHINESE));
        System.out.println("漢字形式:"+ dt.minusYears(1).dayOfMonth().getAsText(Locale.CHINESE));
        System.out.println("漢字形式:" + dt.minusYears(1).dayOfWeek().getAsText(Locale.CHINESE));  
        
        // 判斷是否是閏年 閏月
        System.out.println("是否閏月:" + dt.monthOfYear().isLeap());
        System.out.println("是否閏年:" + dt.year().isLeap());  
        System.out.println("去年是否閏年:" + dt.minusYears(1).year().isLeap());  
        
        //取得一天的開始時間和結束時間
        System.out.println(dt.withTimeAtStartOfDay().toString(FORMATE_FULL));
        System.out.println(dt.millisOfDay().withMaximumValue().toString(FORMATE_FULL));
        
        //獲取現在距離今天結束還有多久時間
        System.out.println( dt.millisOfDay().withMaximumValue().getMillis() - dt.getMillis());
   
        //判斷時間跨度是否包含當前時間,某個時間
        Interval interval = new Interval(new DateTime(2017, 1, 1, 0, 0, 0),new DateTime(2017, 3, 30, 0, 0, 0));
        System.out.println(interval.containsNow());
        boolean contained = interval.contains(new DateTime("2012-03-01")); 
        
    
        //10 天后 那周的週一是
        System.out.println(dt.plusDays(10).dayOfWeek().withMinimumValue().toString(FORMATE_FULL)); 
    
        // DateTime與java.util.Date對象,當前系統TimeMillis轉換  
        DateTime temp1 = new DateTime(new Date());  
        Date temp2 = dt.toDate();  
        DateTime temp3 = new DateTime(System.currentTimeMillis());  
      
        Calendar calendar = Calendar.getInstance();  
        DateTime  temp4 = new DateTime(calendar);
    
    }
    
    /**
     * 這個是get方法
     * 最大單位是年,最小單位毫秒
     * api中均可以最大單位下的子類
     * 比如:可以獲取年終 月、日、時、分、秒、毫秒
     * 一下代碼不全部列出
     */
    private static void useCaseGet(){
    	
    	DateTime dt = new DateTime();
    	//獲取當前時間的年
    	int year = dt.getYear();
    	//獲取當前時間的月
        int month = dt.getMonthOfYear();
        //獲取當前時間是一年中的第幾天
        int dayOfYear = dt.getDayOfYear();
    	//獲取一個月中的天
        int day =  dt.getDayOfMonth();
        //獲取一週中的周幾
        int week = dt.getDayOfWeek();
        //一天中的第幾小時(取整)
        int hour = dt.getHourOfDay();
        //獲取星期年
        int weekOfyear =  dt.getWeekyear();
        //當前時間的秒中的毫秒 
        int ms = dt.getMillisOfSecond();
        //獲取當前時間的秒
        int second = dt.getSecondOfDay();  
        //獲取當前時間的毫秒
        long millis = dt.getMillis();
         
    }
    
    
	public static void main(String[] args) {
		//useCaseOne();
		//  useCaseTwo();
		//useCaseGet();
		useCaseWith();
		 

	}
//計算兩個時間,相差的年月日時分秒
public static void main(String[] args){


    DateTime dt1 = new DateTime(2018, 04, 8, 8, 31);
    DateTime dt2 = new DateTime(2018, 04, 21, 17, 21);
    Interval interval = new Interval(dt1.getMillis(), dt2.getMillis());
    Period p = interval.toPeriod();
    System.out.println(p.toString());
    System.out.println("years:" + p.getYears() + ";months:" + p.getMonths()
            + ";days:" + p.getDays() + ";hours:" + p.getHours()
            + ";minutes:" + p.getMinutes() + ";seconds:" + p.getSeconds()
            + ";mills:" + p.getMillis());
}

發佈了40 篇原創文章 · 獲贊 29 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章