DATE4J 日期和时间操作的Java工具

我们知道,在处理时间的时候,往往需要用到 Java 里的如下类:

1、Date and its subclasses:

java.util.Date
java.sql.Date
java.sql.Timestamp
2、The calendar and time zone classes:
java.util.Calendar
java.util.GregorianCalendar
java.util.TimeZone
java.util.SimpleTimeZone //(for use with the Gregorian calendar only)
3、The formatting and parsing classes:
java.text.DateFormat
java.text.SimpleDateFormat
java.text.DateFormatSymbols
这些处理起来是非常之烦的。如果用DATE4J处理就容易很多了。例子如下:
package hirondelle.date4j;

import java.util.Locale;
import java.util.TimeZone;

/** Examples of how to use date4j. */
public final class Examples {

  /** 
   Run the examples, and output to the console. 
   
  <P>Example output when you run this class: 
  <PRE>
   Current date-time in default time zone : 2011-10-24 08:05:59
   Current date-time in Cairo : 2011-10-24 13:06:00 (Monday)
   Age of someone born May 16, 1995 is : 16
   The 3rd Friday of this month is : 2011-10-21
   Number of days till Christmas : 62
   90 days from today is : 2012-01-22
   3 months and 5 days from today is : 2012-01-29
   Numbers of hours difference between Paris and Perth : 6
   The number of weeks since Sep 6, 2010 : 59
   This many seconds till midnight : 57240
   Output using an ISO format: 2011-10-24T08:06:00
   The first day of this week is : 2011-10-23
   The number of years the JDK date-time API has been suctorial : 15
  </PRE>  
  */
  public static void main(String... aArgs){
    Examples examples = new Examples();
    examples.currentDateTime();
    examples.currentDateTimeInCairo();
    examples.ageIfBornOnCertainDate();
    examples.optionsExpiry();
    examples.daysTillChristmas();
    examples.whenIs90DaysFromToday();
    examples.whenIs3Months5DaysFromToday();
    examples.hoursDifferenceBetweenParisAndPerth();
    examples.weeksSinceStart();
    examples.timeTillMidnight();
    examples.imitateISOFormat();
    examples.firstDayOfThisWeek();
    examples.jdkDatesSuctorial();
  }
  
  // PRIVATE
  
  private static void log(Object aMsg){
    System.out.println(String.valueOf(aMsg));
  }
  
  /** What is the current date-time in the JRE's default time zone? */
  private void currentDateTime(){
    DateTime now = DateTime.now(TimeZone.getDefault());
    String result = now.format("YYYY-MM-DD hh:mm:ss");
    log("Current date-time in default time zone : " + result);
  }
  
  /** What is the current date-time in Cairo (include weekday)? */
  private void currentDateTimeInCairo(){
    DateTime now = DateTime.now(TimeZone.getTimeZone("Africa/Cairo"));
    String result = now.format("YYYY-MM-DD hh:mm:ss (WWWW)", Locale.getDefault());
    log("Current date-time in Cairo : " + result);
  }
  
  /** What's the age of someone born May 16, 1995? */
  private void ageIfBornOnCertainDate(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    DateTime birthdate = DateTime.forDateOnly(1995, 5, 16);
    int age = today.getYear() - birthdate.getYear();
    if(today.getDayOfYear() < birthdate.getDayOfYear()){
      age = age - 1; 
    }
    log("Age of someone born May 16, 1995 is : " + age);
  }
  
  /** Stock options expire on the 3rd Friday of this month. What day of the month is that? */
  private void optionsExpiry(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    DateTime firstOfMonth = today.getStartOfMonth();
    int result = 0;
    if (firstOfMonth.getWeekDay() == 7){
      result = 21;
    }
    else {
       result = 21 - firstOfMonth.getWeekDay();
    }
    DateTime thirdFriday = DateTime.forDateOnly(firstOfMonth.getYear(), firstOfMonth.getMonth(), result);
    log("The 3rd Friday of this month is : " + thirdFriday.format("YYYY-MM-DD"));
  }
  
  /** How many days till the next December 25? */
  private void daysTillChristmas(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    DateTime christmas = DateTime.forDateOnly(today.getYear(), 12, 25);
    int result = 0;
    if(today.isSameDayAs(christmas)){
      // do nothing
    }
    else if (today.lt(christmas)){
      result = today.numDaysFrom(christmas);
    }
    else if (today.gt(christmas)){
      DateTime christmasNextYear = DateTime.forDateOnly(today.getYear() + 1, 12, 25);
      result = today.numDaysFrom(christmasNextYear);
    }
    log("Number of days till Christmas : " + result);
  }
  
  /** What day is 90 days from today? */
  private void whenIs90DaysFromToday(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    log("90 days from today is : " + today.plusDays(90).format("YYYY-MM-DD"));
  }

  /** What day is 3 months and 5 days from today? */
  private void whenIs3Months5DaysFromToday(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    DateTime result = today.plus(0,3,5,0,0,0,0,DateTime.DayOverflow.FirstDay);
    log("3 months and 5 days from today is : " + result.format("YYYY-MM-DD"));
  }
  
  /** Current number of hours difference between Paris, France and Perth, Australia. */
  private void hoursDifferenceBetweenParisAndPerth(){
    //this assumes the time diff is a whole number of hours; other styles are possible
    DateTime paris = DateTime.now(TimeZone.getTimeZone("Europe/Paris"));
    DateTime perth = DateTime.now(TimeZone.getTimeZone("Australia/Perth"));
    int result = perth.getHour() - paris.getHour();
    if( result < 0 ) {
      result = result + 24;
    }
    log("Numbers of hours difference between Paris and Perth : " + result);
  }
  
  /** How many weeks is it since Sep 6, 2010? */
  private void weeksSinceStart(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    DateTime startOfProject = DateTime.forDateOnly(2010, 9, 6);
    int result = today.getWeekIndex() - startOfProject.getWeekIndex();
    log("The number of weeks since Sep 6, 2010 : " + result);
  }
  
  /** How much time till midnight? */
  private void timeTillMidnight(){
    DateTime now = DateTime.now(TimeZone.getDefault());
    DateTime midnight = now.plusDays(1).getStartOfDay();
    long result = now.numSecondsFrom(midnight);
    log("This many seconds till midnight : " + result);
  }
  
  /** Format using ISO style. */
  private void imitateISOFormat(){
    DateTime now = DateTime.now(TimeZone.getDefault());
    log("Output using an ISO format: " + now.format("YYYY-MM-DDThh:mm:ss"));
  }

  private void firstDayOfThisWeek(){
    DateTime today = DateTime.today(TimeZone.getDefault()); 
    DateTime firstDayThisWeek = today; //start value 
    int todaysWeekday = today.getWeekDay();
    int SUNDAY = 1;
    if(todaysWeekday > SUNDAY){
      int numDaysFromSunday = todaysWeekday - SUNDAY;
      firstDayThisWeek = today.minusDays(numDaysFromSunday);
    }
    log("The first day of this week is : " + firstDayThisWeek);
  }
  
  /** For how many years has the JDK date-time API been suctorial? */
  private void jdkDatesSuctorial(){
    DateTime today = DateTime.today(TimeZone.getDefault());
    DateTime jdkFirstPublished = DateTime.forDateOnly(1996, 1, 23);
    int result = today.getYear() - jdkFirstPublished.getYear();
    log("The number of years the JDK date-time API has been suctorial : " + result);
  }
  
}
更加详细的信息,请大家查看官方的文档: http://www.date4j.net/


转载于:https://my.oschina.net/jamaly/blog/268705

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值