JAVA Calendarは、ある月の初日、最終日、ある週の初日、最終日を取得
4196 ワード
今日の年月日を取得
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); String today = sdf.format(new Date()); System.out.println(「今日:」+today);//今日の年月日を取得し、2019-09-11
年月日時分秒の書式:yyyy-MM-dd HH:mm:ss
日付文字列の指定--変換→日付形式Calendar
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date thisDate = sdf.parse("2020-01-01"); Calendar cld = Calendar.getInstance(); cld.setTime(thisDate); String thisDay = sdf.format(cld.getTime()); System.out.println("指定日:"+this Day);//指定した日付の年月日を取得し、2020-01-01
指定した日付が属する月の最終日を取得
第一の方法
//日付文字列の指定--変換--日付フォーマットCalendar SimpleDateFormat sdf=new SimpleDateFormat("yyyyy-MM-dd");Date thisDate = sdf.parse("2019-09-15"); Calendar cld = Calendar.getInstance(); cld.setTime(thisDate);
//月+1、日は0に設定します.来月の0日目は、今月の最終日cld.add(Calendar.MONTH,1);cld.set(Calendar.DAY_OF_MONTH, 0); String lastDay = sdf.format(cld.getTime()); System.out.println("今月最終日"+lastDay);//2019-09-30
cld.set(Calendar.DAY_OF_MONTH,1); System.out.println("今月初日"+sdf.format(cld.gettime());//2019-09-01
2つ目の方法は
Calendar類のset()には落とし穴があるそうですが、念のため第一の方法を使いましょう.https://blog.csdn.net/freelk/article/details/78427207
//日付文字列の指定--変換--日付フォーマットCalendar SimpleDateFormat sdf=new SimpleDateFormat("yyyyy-MM-dd");Date thisDate = sdf.parse("2019-09-15"); Calendar cld = Calendar.getInstance(); cld.setTime(thisDate); //月+1、日を0に設定します.来月の0日目は、今月の最終日cld.set(cld.get(Calendar.YEAR)、cld.get(Calendar.MONTH)+1,0)です. String lastDay = sdf.format(cld.getTime()); System.out.println("今月最終日"+lastDay);//2019-09-30
指定された日付の先週の最初の日、最後の日、すなわち月曜日と日曜日を取得します.
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日付フォーマットCalendar cld=Calendar.getInstance(Locale.CHINA);//中国タイムゾーンを使用してカレンダーcld.settTime(sdf.parse(「2019-12-22」)を取得します.cld.add(Calendar.DATE, -7);cld.setFirstDayOfWeek(Calendar.MONDAY);//月曜日を初日とする
cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//月曜日System.out.println(sdf.format(cld.gettime());
cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//日曜日System.out.println(sdf.format(cld.gettime());
Calendarのgetメソッド
Calendar cld = Calendar.getInstance(); System.out.println("Current Date: "+ cld.getTime());//Current Date: Wed Sep 11 08:17:25 CST 2019 System.out.println("Year: "+ cld.get(Calendar.YEAR));//2019 System.out.println("Month: "+ (cld.get(Calendar.MONTH) + 1));//9,グリニッジカレンダーは0~11なので、1 System.out.println("Day:"+cld.get(Calendar.DATE);//11,現在の日付2019-09-11 System.out.println("Hour:"+cld.get(Calendar.HOUR);//8,現在時刻08:20:25 System.out.println(「HOUR_OF_DAY:」+cld.get(Calendar.HOUR_OF_DAY);//8,現在時刻08:20:25 System.out.println(「Minute:」+cld.get(Calendar.MINUTE);//20,現在時刻08:20:25 System.out.println(「Second:」+cld.get(Calendar.SECOND);//25,現在時刻08:20:25 System.out.println(「DAY_OF_WEEK:」+cld.get(Calendar.DAY_OF_WEEK);//4,水曜日、西方の日曜日は1 System.out.println(「DAY_OF_MONTH:」+cld.get(Calendar.DAY_OF_MONTH);//11,現在の日付2019-09-11 System.out.println(「DAY_OF_YEAR:」+cld.get(Calendar.DAY_OF_YEAR);//254、現在の日付2019-09-11
System.out.println(「現在の日付文字列:」+cld.get(Calendar.YEAR)+「-」+(cld.get(Calendar.MONTH)+1)+「-」+cld.get(Calendar.DATE)+「」 + cld.get(Calendar.HOUR) + ":"+ cld.get(Calendar.MINUTE) + ":"+ cld.get(Calendar.SECOND)); //2019-9-11 8:20:25
getActualMaximumメソッド:
前にBUGがありましたが、2017年2月を設定すると、取得日は2017-03-03ですが、他の月は問題ありません.
なぜならCalendarクラスはsetの時にすぐには有効にならず、getの時だけ有効になるからです.
解決策は、Calendarクラスをインスタンス化した後、clear()メソッドを呼び出してキャッシュをクリアすることです.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); String today = sdf.format(new Date()); System.out.println(「今日:」+today);//今日の年月日を取得し、2019-09-11
年月日時分秒の書式:yyyy-MM-dd HH:mm:ss
日付文字列の指定--変換→日付形式Calendar
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date thisDate = sdf.parse("2020-01-01"); Calendar cld = Calendar.getInstance(); cld.setTime(thisDate); String thisDay = sdf.format(cld.getTime()); System.out.println("指定日:"+this Day);//指定した日付の年月日を取得し、2020-01-01
指定した日付が属する月の最終日を取得
第一の方法
//日付文字列の指定--変換--日付フォーマットCalendar SimpleDateFormat sdf=new SimpleDateFormat("yyyyy-MM-dd");Date thisDate = sdf.parse("2019-09-15"); Calendar cld = Calendar.getInstance(); cld.setTime(thisDate);
//月+1、日は0に設定します.来月の0日目は、今月の最終日cld.add(Calendar.MONTH,1);cld.set(Calendar.DAY_OF_MONTH, 0); String lastDay = sdf.format(cld.getTime()); System.out.println("今月最終日"+lastDay);//2019-09-30
cld.set(Calendar.DAY_OF_MONTH,1); System.out.println("今月初日"+sdf.format(cld.gettime());//2019-09-01
2つ目の方法は
Calendar類のset()には落とし穴があるそうですが、念のため第一の方法を使いましょう.https://blog.csdn.net/freelk/article/details/78427207
//日付文字列の指定--変換--日付フォーマットCalendar SimpleDateFormat sdf=new SimpleDateFormat("yyyyy-MM-dd");Date thisDate = sdf.parse("2019-09-15"); Calendar cld = Calendar.getInstance(); cld.setTime(thisDate); //月+1、日を0に設定します.来月の0日目は、今月の最終日cld.set(cld.get(Calendar.YEAR)、cld.get(Calendar.MONTH)+1,0)です. String lastDay = sdf.format(cld.getTime()); System.out.println("今月最終日"+lastDay);//2019-09-30
指定された日付の先週の最初の日、最後の日、すなわち月曜日と日曜日を取得します.
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日付フォーマットCalendar cld=Calendar.getInstance(Locale.CHINA);//中国タイムゾーンを使用してカレンダーcld.settTime(sdf.parse(「2019-12-22」)を取得します.cld.add(Calendar.DATE, -7);cld.setFirstDayOfWeek(Calendar.MONDAY);//月曜日を初日とする
cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//月曜日System.out.println(sdf.format(cld.gettime());
cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//日曜日System.out.println(sdf.format(cld.gettime());
Calendarのgetメソッド
Calendar cld = Calendar.getInstance(); System.out.println("Current Date: "+ cld.getTime());//Current Date: Wed Sep 11 08:17:25 CST 2019 System.out.println("Year: "+ cld.get(Calendar.YEAR));//2019 System.out.println("Month: "+ (cld.get(Calendar.MONTH) + 1));//9,グリニッジカレンダーは0~11なので、1 System.out.println("Day:"+cld.get(Calendar.DATE);//11,現在の日付2019-09-11 System.out.println("Hour:"+cld.get(Calendar.HOUR);//8,現在時刻08:20:25 System.out.println(「HOUR_OF_DAY:」+cld.get(Calendar.HOUR_OF_DAY);//8,現在時刻08:20:25 System.out.println(「Minute:」+cld.get(Calendar.MINUTE);//20,現在時刻08:20:25 System.out.println(「Second:」+cld.get(Calendar.SECOND);//25,現在時刻08:20:25 System.out.println(「DAY_OF_WEEK:」+cld.get(Calendar.DAY_OF_WEEK);//4,水曜日、西方の日曜日は1 System.out.println(「DAY_OF_MONTH:」+cld.get(Calendar.DAY_OF_MONTH);//11,現在の日付2019-09-11 System.out.println(「DAY_OF_YEAR:」+cld.get(Calendar.DAY_OF_YEAR);//254、現在の日付2019-09-11
System.out.println(「現在の日付文字列:」+cld.get(Calendar.YEAR)+「-」+(cld.get(Calendar.MONTH)+1)+「-」+cld.get(Calendar.DATE)+「」 + cld.get(Calendar.HOUR) + ":"+ cld.get(Calendar.MINUTE) + ":"+ cld.get(Calendar.SECOND)); //2019-9-11 8:20:25
getActualMaximumメソッド:
前にBUGがありましたが、2017年2月を設定すると、取得日は2017-03-03ですが、他の月は問題ありません.
なぜならCalendarクラスはsetの時にすぐには有効にならず、getの時だけ有効になるからです.
解決策は、Calendarクラスをインスタンス化した後、clear()メソッドを呼び出してキャッシュをクリアすることです.
Calendar calendar=Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, 2017);
calendar.set(Calendar.MONTH, 1);
int lastDay=calendar.getActualMaximum(calendar.DAY_OF_MONTH); // getActualMinimum()
System.out.println("2017 2 :"+lastDay); //28
calendar.set(Calendar.DAY_OF_MONTH, lastDay);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(calendar.getTime())); //2017-02-28