2015年1月13日 星期二

JAVA Joda-Time 日期功能套件

我們在開發程式的時候,
常常會需要處理日期,
使用使用 java.util.Calendar 多少會讓開發者有些難處理,
所以因緣際會下我發現了Joda-Time 套件,
發現這套件易於使用是這套件主要的目的,
以下有幾個項目會將展示出其功能


一. 套用 Joda-time.jar
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sample</groupId>
  <artifactId>joda-time</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
    <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <joda-time.version>2.6</joda-time.version>
 </properties>
 
 <dependencies>
 
  <!-- Joda-Time --> 
  <!-- http://www.ibm.com/developerworks/cn/java/j-jodatime.html -->
  <dependency>
     <groupId>joda-time</groupId>
     <artifactId>joda-time</artifactId>
     <version>${joda-time.version}</version>
    </dependency>
    
 </dependencies>
</project>



二. Joda-time 時間基本構成
package com.joda.example;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

public class JodaTimeExample_1 {

 /**
  * 基本時間構成
  */
 public static void main(String[] args) {
  
  //取得系統時間
  DateTime dt1 = new DateTime();
  System.out.println("取得系統時間");
  System.out.println(dt1);
  
  System.out.println("--------------------------------------------------");
  
  //通過java.util.Date對象生成
  DateTime dt2 = new DateTime(new Date());
  System.out.println("通過java.util.Date對象生成");
  System.out.println(dt2);
  
  System.out.println("--------------------------------------------------");
  
  //指定年月日點分秒生成(參數依次是:年,月,日,時,分,秒,毫秒)
  DateTime dt3 = new DateTime(2012, 5, 20, 13, 14, 0, 0);
  System.out.println("指定年月日點分秒生成(參數依次是:年,月,日,時,分,秒,毫秒)");
  System.out.println(dt3);
  
  System.out.println("--------------------------------------------------");
  
  //ISO8601形式生成
  DateTime dt4 = new DateTime("2012-05-20");
  DateTime dt5 = new DateTime("2012-05-20T13:14:00");
  System.out.println("ISO8601形式生成");
  System.out.println(dt4);
  System.out.println(dt5);
  
  System.out.println("--------------------------------------------------");
  
  //只需要年月日的時候
  LocalDate localDate = new LocalDate(new Date());
  System.out.println("只需要年月日的時候");
  System.out.println(localDate);
  
  System.out.println("--------------------------------------------------");
  
  //只需要時分秒毫秒的時候
  LocalTime localTime = new LocalTime(new Date());
  System.out.println("只需要時分秒毫秒的時候");
  System.out.println(localTime);
  
  System.out.println("--------------------------------------------------");

 }

}



三. 取得年月日時分秒
package com.joda.example;

import java.util.Locale;

import org.joda.time.DateTime;

public class JodaTimeExample_2 {

 /**
  * 取得年月日時分秒
  */
 public static void main(String[] args) {

  //取得系統時間
  DateTime dt = new DateTime();
  System.out.println("取得系統時間");
  System.out.println(dt);
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統年");
  System.out.println(dt.getYear());
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統月");
  System.out.println(dt.getMonthOfYear());
  System.out.println(dt.monthOfYear().getAsText());
  System.out.println(dt.monthOfYear().getAsShortText(Locale.US));
  System.out.println(dt.monthOfYear().getAsText(Locale.US));
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統日");
  System.out.println(dt.getDayOfMonth());
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統星期");
  System.out.println(dt.getDayOfWeek());
  System.out.println(dt.dayOfWeek().getAsText());
  System.out.println(dt.dayOfWeek().getAsShortText(Locale.US));
  System.out.println(dt.dayOfWeek().getAsText(Locale.US));
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統小時");
  System.out.println(dt.getHourOfDay());
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統分鐘");
  System.out.println(dt.getMinuteOfHour());
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統秒");
  System.out.println(dt.getSecondOfMinute());
  
  System.out.println("--------------------------------------------------");
  
  System.out.println("取得系統毫秒");
  System.out.println(dt.getMillisOfSecond());
  
  System.out.println("--------------------------------------------------");
  System.out.println("取得今年第幾週");
  System.out.println(dt.getWeekOfWeekyear());
  
  System.out.println("--------------------------------------------------");
  System.out.println("取得今年第幾天");
  System.out.println(dt.getDayOfYear());
 
  System.out.println("--------------------------------------------------");
  System.out.println("取得時區");
  System.out.println(dt.getZone());
  
  System.out.println("--------------------------------------------------");
  System.out.println("是否閏年");
  System.out.println(dt.year().isLeap());
  
  System.out.println("--------------------------------------------------");
  System.out.println("當月最大的日期");
  System.out.println(dt.dayOfMonth().getMaximumValue());
 }

}


四.星期的特殊處理
package com.joda.example;

import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;

public class JodaTimeExample_3 {

 /**
  * 星期的特殊處理
  */
 public static void main(String[] args) {

  // 取得系統時間
  DateTime dt = new DateTime();
  System.out.println("取得系統時間");
  System.out.println(dt);

  System.out.println("------------------------------------------------------");
  switch (dt.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("星期六");
   break;
  }

 }

}


五.與JDK日期物件轉換
package com.joda.example;

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

import org.joda.time.DateTime;

public class JodaTimeExample_4 {

 /**
  * 與JDK日期物件轉換
  */
 public static void main(String[] args) {

  //取得系統時間
  DateTime dt = new DateTime();
  System.out.println("取得系統時間");
  System.out.println(dt);
    
  System.out.println("------------------------------------------------------");
  
  //轉換成java.util.Date物件
  System.out.println("轉換成java.util.Date物件");
  Date d1 = new Date(dt.getMillis());
  Date d2 = dt.toDate();
  System.out.println(d1);
  System.out.println(d2);
  
  System.out.println("------------------------------------------------------");
  
  //轉換成java.util.Calendar物件
  System.out.println("轉換成java.util.Calendar物件");
  Calendar c1 = Calendar.getInstance();
  c1.setTimeInMillis(dt.getMillis());
  Calendar c2 = dt.toCalendar(Locale.getDefault());
  System.out.println(c1.getTime());
  System.out.println(c2.getTime());
  
 }

}


六.日期前後推算
package com.joda.example;

import org.joda.time.DateTime;

public class JodaTimeExample_5 {

 /**
  * 日期前後推算
  */
 public static void main(String[] args) {
  
  //取得系統時間
  DateTime dt = new DateTime();
  System.out.println("取得系統時間");
  System.out.println(dt);
  
  System.out.println("------------------------------------------------------");
  
  //昨天
  System.out.println("昨天");
  System.out.println(dt.minusDays(1));
  //明天
  System.out.println("明天");
  System.out.println(dt.plusDays(1));
  //1個月前
  System.out.println("1個月前");
  System.out.println(dt.minusMonths(1));
  //1個月後
  System.out.println("1個月後");
  System.out.println(dt.plusMonths(1));
  //2年前
  System.out.println("2年前");
  System.out.println(dt.minusYears(2));
  //2年後
  System.out.println("2年後");
  System.out.println(dt.plusYears(2));

 }

}


七.取得特殊日期
package com.joda.example;

import org.joda.time.DateTime;

public class JodaTimeExample_6 {

 /**
  * 取得特殊日期
  */
 public static void main(String[] args) {
  
  //取得系統時間
  DateTime dt = new DateTime();
  System.out.println("取得系統時間");
  System.out.println(dt);
  
  System.out.println("------------------------------------------------------");
  
  //這個月的最後一天日期
  System.out.println("這個月的最後一天日期");
  System.out.println(dt.dayOfMonth().withMaximumValue());
  
  System.out.println("------------------------------------------------------");
  
  //90天後那個星期的星期一日期
  System.out.println("90天後那個星期的星期一日期");
  System.out.println(dt.plusDays(90).dayOfWeek().withMinimumValue());
  

 }

}



八.時區
package com.joda.example;

import org.joda.time.Chronology;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.chrono.CopticChronology;

public class JodaTimeExample_7 {

 /**
  * 時區
  */
 public static void main(String[] args) {
  
  //取得預設的時區
  Chronology coptic = CopticChronology.getInstance();
  System.out.println("取得預設的時區");
  System.out.println(coptic.getZone());
  
  System.out.println("------------------------------------------------------");
  
  //日本時間
  DateTimeZone.setDefault(DateTimeZone.forID("Asia/Tokyo"));
  DateTime dt = new DateTime();
  System.out.println("日本時間");
  System.out.println(dt);
  
  System.out.println("------------------------------------------------------");
  
  //倫敦時間
  DateTime dt1 = new DateTime(DateTimeZone.forID("Europe/London"));
  System.out.println("倫敦時間");
  System.out.println(dt1);
  
  System.out.println("------------------------------------------------------");
  
  //台灣時間
  DateTime dt2 = new DateTime(DateTimeZone.forID("Asia/Taipei"));
  System.out.println("台灣時間");
  System.out.println(dt2);
  
  System.out.println("------------------------------------------------------");
  
  //台灣時區轉為日本時區
  DateTime jDate1 = new DateTime(dt2, DateTimeZone.forOffsetHours(9));
  DateTime jDate2 = new DateTime(dt2, DateTimeZone.forID("Asia/Tokyo"));
  System.out.println("台灣時區轉為日本時區");
  System.out.println(jDate1);
  System.out.println(jDate2);

 }

}



九.日期比較
package com.joda.example;

import org.joda.time.DateTime;

public class JodaTimeExample_8 {

 /**
  * 日期比較
  */
 public static void main(String[] args) {
  
  DateTime d1 = new DateTime("2015-01-01");
  DateTime d2 = new DateTime("2015-05-01");
  
  //與系統時間比較
  boolean b1 = d1.isAfterNow();
  boolean b2 = d1.isBeforeNow();
  boolean b3 = d1.isEqualNow();
  System.out.println("與系統時間比較");
  System.out.println(b1);
  System.out.println(b2);
  System.out.println(b3);
  
  System.out.println("------------------------------------------------------");
  
  //與其他時間比較
  boolean f1 = d1.isAfter(d2);
  boolean f2 = d1.isBefore(d2);
  boolean f3 = d1.isEqual(d2);
  int f4 = d1.compareTo(d2);
  boolean f5 = d1.equals(d2);
  System.out.println("與其他時間比較");
  System.out.println(f1);
  System.out.println(f2);
  System.out.println(f3);
  System.out.println(f4);
  System.out.println(f5);
 }

}



十.日期格式化
package com.joda.example;

import org.joda.time.DateTime;

public class JodaTimeExample_9 {

 /**
  * 日期格式化
  */
 public static void main(String[] args) {
  
  DateTime dateTime = new DateTime();
  
  //default
  System.out.println(dateTime);
  
  System.out.println("------------------------------------------------------");
  
  //yyyy/MM/dd hh:mm:ss.SSSa
  System.out.println("yyyy/MM/dd hh:mm:ss.SSSa");
  System.out.println(dateTime.toString("yyyy/MM/dd hh:mm:ss.SSSa"));
  
  System.out.println("------------------------------------------------------");
  
  //yyyy/MM/dd hh:mm:ss
  System.out.println("yyyy/MM/dd hh:mm:ss");
  System.out.println(dateTime.toString("yyyy/MM/dd hh:mm:ss"));
  
  System.out.println("------------------------------------------------------");
  
  //EEEE dd MMMM, yyyy HH:mm:ssa
  System.out.println("EEEE dd MMMM, yyyy HH:mm:ssa");
  System.out.println(dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa"));
  
  System.out.println("------------------------------------------------------");
  
  //yyyy/MM/dd HH:mm ZZZZ
  System.out.println("yyyy/MM/dd HH:mm ZZZZ");
  System.out.println(dateTime.toString("yyyy/MM/dd HH:mm ZZZZ"));
  
  System.out.println("------------------------------------------------------");
  
  //yyyy/MM/dd HH:mm Z
  System.out.println("yyyy/MM/dd HH:mm Z");
  System.out.println(dateTime.toString("yyyy/MM/dd HH:mm Z"));
  
 }

}


十一.計算區間
package com.joda.example;

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.Interval;
import org.joda.time.Period;
import org.joda.time.PeriodType;

public class JodaTimeExample_10 {

 /**
  * 計算區間
  */
 public static void main(String[] args) {
  
  DateTime begin = new DateTime("2015-01-01");
  DateTime end = new DateTime("2015-05-01");
  
  //計算區間毫秒數
  Duration d = new Duration(begin, end);
  System.out.println("計算區間毫秒數");
  System.out.println(d.getMillis());
  
  System.out.println("------------------------------------------------------");
  
  //計算區間天數
  Period p = new Period(begin, end, PeriodType.days());
  System.out.println("計算區間天數");
  System.out.println(p.getDays());
  
  System.out.println("------------------------------------------------------");
  
  //計算特定日期是否在該區間內
  Interval i = new Interval(begin, end);
  System.out.println("計算特定日期是否在該區間內");
  System.out.println(i.contains(new DateTime("2015-03-01")));
  System.out.println(i.contains(new DateTime("2014-03-01")));
  
 }

}
















其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...