Javaでのjoda日付フォーマットツールの使用
Javaでのjoda日付フォーマットツールの使用
1.基本紹介
Javaには日付フォーマットツールDateFormatが用意されていますが、SimpleDateFormatを含むDateFormatのすべての実装はスレッドが安全ではありません.そのため、SimpleDateFormatをThreadLocalに制限するなど、外部スレッドの安全な環境で使用しない限り、マルチラインプログラムで使用するべきではありません.そうしないと、日付を解析したりフォーマットしたりすると、不正な結果が得られる可能性があります.そのため、日付、時間処理のすべての実践から、joda-timeライブラリの使用を強くお勧めします.
2.joda-timeの使用依存 を導入する.作成テストクラス の利点 1.使いやすい:Calendarは「通常」の日付を取得することを困難にし、簡単な方法を提供することができません.Joda-timeは直接ドメインにアクセスでき、インデックス値1はJanuaryを表します.2.拡張しやすい:JDKがマルチカレンダーシステムをサポートすることは、Calendarのサブクラスによって実現され、非常に重く表示され、実際には他のカレンダーシステムを実現することは困難である.Joda-timeがマルチカレンダーシステムをサポートするのはChronologyクラスに基づくプラグインシステムによって実現される.
3.完全な機能のセットを提供する:date-time計算に関係するすべての機能を提供するつもりです.Joda-timeは現在8種類のカレンダーシステムをサポートしており、将来的にはJDK Calendarよりも全体的な性能などを追加し続けます.
1.基本紹介
Javaには日付フォーマットツールDateFormatが用意されていますが、SimpleDateFormatを含むDateFormatのすべての実装はスレッドが安全ではありません.そのため、SimpleDateFormatをThreadLocalに制限するなど、外部スレッドの安全な環境で使用しない限り、マルチラインプログラムで使用するべきではありません.そうしないと、日付を解析したりフォーマットしたりすると、不正な結果が得られる可能性があります.そのため、日付、時間処理のすべての実践から、joda-timeライブラリの使用を強くお勧めします.
2.joda-timeの使用
joda-time
joda-time
2.10.5
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 (isBlank(zimeZone)) {
timeZone = TimeZone.getDefault();
} else {
timeZone = TimeZone.getTimeZone(zimeZone);
}
if (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 (isBlank(zimeZone)) {
timeZone = TimeZone.getDefault();
} else {
timeZone = TimeZone.getTimeZone(zimeZone);
}
if (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 " ";
}
/**
*
* @Title: isBlank
* @Description: TODO( 0 )
* @param @param str
* @param @return
* @return boolean
* @throws
*/
public static boolean isBlank(String str) {
return (str == null || str.trim().length() == 0);
}
public static void main(String[] args) throws Throwable {
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"));
}
}
3.完全な機能のセットを提供する:date-time計算に関係するすべての機能を提供するつもりです.Joda-timeは現在8種類のカレンダーシステムをサポートしており、将来的にはJDK Calendarよりも全体的な性能などを追加し続けます.