java date4j_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.

Example output when you run this class:

 
 

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

*/

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/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值