Javaでのjoda日付フォーマットツールの使用


Javaでのjoda日付フォーマットツールの使用
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"));
        }
    
    }
  • の利点
  • 1.使いやすい:Calendarは「通常」の日付を取得することを困難にし、簡単な方法を提供することができません.Joda-timeは直接ドメインにアクセスでき、インデックス値1はJanuaryを表します.2.拡張しやすい:JDKがマルチカレンダーシステムをサポートすることは、Calendarのサブクラスによって実現され、非常に重く表示され、実際には他のカレンダーシステムを実現することは困難である.Joda-timeがマルチカレンダーシステムをサポートするのはChronologyクラスに基づくプラグインシステムによって実現される.
    3.完全な機能のセットを提供する:date-time計算に関係するすべての機能を提供するつもりです.Joda-timeは現在8種類のカレンダーシステムをサポートしており、将来的にはJDK Calendarよりも全体的な性能などを追加し続けます.