LoginSignup
11
11

More than 5 years have passed since last update.

Java - JodaTime 日付関連が凄く簡単

Last updated at Posted at 2013-02-21
package test;

import java.util.ArrayList;
import java.util.List;

import org.joda.time.DateMidnight;
import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.junit.Test;

public class JodaTimeSample {

        @Test
        public void sample1() {

                // 現在日時
                DateTime datetime = new DateTime();
                System.out.println("現在の日時: " + datetime);
                System.out.println("年: " + datetime.getYear());
                System.out.println("月: " + datetime.getMonthOfYear());
                System.out.println("日: " + datetime.getDayOfMonth());
                System.out.println("曜日: " + datetime.getDayOfWeek());
                System.out.println("時: " + datetime.getHourOfDay());
                System.out.println("分: " + datetime.getMinuteOfHour());
                System.out.println("秒: " + datetime.getSecondOfMinute());

                // 2005年の今日
                System.out.println("2005年の今日: " + datetime.withYear(2005));

                // 一ヶ月後
                System.out.println("1ヶ月後: " + datetime.plusMonths(1));

                // 文字列フォーマットと日付型変換
                DateTime dt1 = new DateTime("2011-04-05T13:20:25");
                System.out.println(dt1.toString("yyyy年MM月dd日"));
                System.out.println(dt1.toDate());

                DateTime dt2 = new DateTime("2011-04-05");
                System.out.println(dt2.toString("yyyy年MM月dd日"));
                System.out.println(dt2.toDate());

                // これはダメ
                DateTime dt3 = new DateTime("20110405");
                System.out.println(dt3.toString("yyyy年MM月dd日"));
                System.out.println(dt3.toDate());

        }

        @Test
        public void sample2() {

                DateMidnight dm1 = new DateMidnight(2011, 6, 17);
                DateTime dm2 = new DateTime(2011, 6, 19, 23, 59, 59, 0);

                // 日付範囲を持つオブジェクト
                Interval interval = new Interval(dm1, dm2);

                System.out.println(interval.getStart());
                System.out.println(interval.getEnd());
        }

        @Test
        public void sample3() {

                // 日曜日始まりの週表示のカレンダー
                int y = 2011;
                int m = 6;

                // 月の初日の前週の日曜日を取得
                DateMidnight str = new DateMidnight(y, m, 1).withDayOfWeek(1).minusDays(1);
                // 月の末日の週の土曜日を取得
                DateMidnight end = new DateMidnight(y, m, 1).dayOfMonth().withMaximumValue().withDayOfWeek(7);

                // ネスト構造のリストにする
                List<List<String>> month = new ArrayList<List<String>>();
                List<String> week = new ArrayList<String>();
                while (!str.equals(end)) {
                        week.add(String.format("%02d", str.getDayOfMonth()));
                        str = str.plusDays(1);
                        if (str.getDayOfWeek() == 7) {
                                month.add(week);
                                week = new ArrayList<String>();
                        }
                }

                // 表示
                System.out.println(String.format(" %s年%s月", y, m));
                System.out.println(" 日 月 火 水 木 金 土");
                for (List<String> w : month) {
                        for (String d : w) {
                                System.out.print(" " + d);
                        }
                        System.out.println("");
                }
        }

        @Test
        public void sample4() {

                // 日付の範囲を取得
                DateTime str = new DateTime(2011, 1, 1, 12, 0, 0, 0);
                DateTime end = new DateTime(2011, 1, 2, 13, 30, 0, 0);
                Interval interval = new Interval(str, end);
                Period period = interval.toPeriod();
                System.out.println(period.getDays());
                System.out.println(period.getHours());
                System.out.println(period.getMinutes());
        }

        @Test
        public void sample5() {
                DateTime str1 = new DateTime(0, 1, 1, 0, 0, 0, 0);
                DateTime end1 = new DateTime(2011, 6, 1, 23, 59, 59, 0);
                DateTime str2 = new DateTime(2011, 6, 2, 0, 0, 0, 0);
                DateTime end2 = new DateTime(2011, 6, 3, 23, 59, 59, 0);
                DateTime str3 = new DateTime(2011, 6, 4, 0, 0, 0, 0);
                DateTime end3 = new DateTime(9999, 1, 1, 0, 0, 0, 0);
                Interval interval1 = new Interval(str1, end1);
                Interval interval2 = new Interval(str2, end2);
                Interval interval3 = new Interval(str3, end3);

                interval1.withEnd(end2);
                List<Interval> list = new ArrayList<Interval>();
                list.add(interval1);
                list.add(interval2);
                list.add(interval3);

                // 開始日・終了日を一日プラスしてみる
                List<Interval> list2 = new ArrayList<Interval>();
                for(Interval i : list){
                        list2.add(i.withEnd(i.getEnd().plusDays(1)).withStart(i.getStart().plusDays(1)));
                }

                for (Interval i : list2) {
                        if(i.getStart().getYear() == 0){
                                System.out.println(i.getEnd().toString("yyyy/MM/dd"));
                        }else if(i.getEnd().getYear() == 9999){
                                System.out.println(i.getStart().toString("yyyy/MM/dd"));
                        }else if(i.getStart().toString("yyyy/MM/dd").equals(i.getEnd().toString("yyyy/MM/dd"))){
                                System.out.println(i.getStart().toString("yyyyMMdd"));
                        }else{
                                System.out.println(i.getStart().toString("yyyy/MM/dd") + "~" + i.getEnd().toString("yyyy/MM/dd"));
                        }
                }
        }
}
11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11