この記事は、WordPressにて投稿していた内容です。
よろしければWordPressにも遊びに来てください(=゚ω゚)ノ

 

Javaを勉強している際に「日付(曜日含む)」の取得をするコードで長時間悩んだ事があります。


初心者向けに基本的な文法だけで取得できる方法を記載したいと思います。
 

一度コードを書いてしまえば、必要な時に都度使い回せますので備忘録の意味も含め記事しています。
(環境:Mac・Eclipse_2020-12を使用しています。)

 

1.現在の日付を取得する。

まずは、細かい説明は抜きにして私がたどり着いた答えを2つ記載します。
初心者向けの内容になっていると思います。(^_^)/

・①Dateクラスを使用する

import java.text.SimpleDateFormat;
import java.util.Date;
 public class Date_sample {
  public static void main(String[] args) {
   // パターンを指定してSimpleDateFormatのインスタンスを生成 
  SimpleDateFormat date = new SimpleDateFormat("yyyy年MM月dd日(E)HH:mm:ss");
    // 現在の日時でDate型を取得
    Date now = new Date();
    // dateの戻り値をstrに格納
    String str = date.format(now);
    //strを表示
   System.out.println("現在の時刻:" + str);
   }
 }
実行すると【現在の時刻:〇〇〇〇年〇〇月〇〇日(〇)〇〇:〇〇:〇〇】と表示されると思います。

・②Calendarクラスを使用する

import java.util.Calendar;
 public class Date_sample2 {
   public static void main(String[] args) {
   // Calendarのインスタンス
    Calendar cal = Calendar.getInstance();
   //西暦を取得してyearに格納
   int year = cal.get(Calendar.YEAR);
   //月を取得してmonthに格納(monthには+1が必要)
   int month = cal.get(Calendar.MONTH) + 1;
   //日付を取得してdayに格納
   int day = cal.get(Calendar.DAY_OF_MONTH);
   //時刻を取得してhourに格納
   int hour = cal.get(Calendar.HOUR_OF_DAY);
   //分を取得してminuteに格納
   int minute = cal.get(Calendar.MINUTE);
   //曜日を配列に格納(システム上、土曜日から格納しないと日付がずれる
   //0⇒土曜日、1⇒日曜日、、、6⇒金曜日
   String []week= {"土","日","月","火","水","木","金"};
   //DAY_OF_WEEKで取得した数字と上記の配列番号に間違いがなければ正しい曜日を取得できる。
   String weekday=week[cal.get(Calendar.DAY_OF_WEEK)]; 
  System.out.println("現在の時刻:"+year+"年"+month+"月"
              +day+"日("+weekday+")"+hour+":"+minute);
   }
 }

実行すると【現在の時刻:〇〇〇〇年〇〇月〇〇日(〇)〇〇:〇〇】と表示されると思います。

 

上記2つの詳細は、下記に記載しますのでご確認ください。
解説した内容に誤りがあるかもしれませんので、ご容赦いただけますと幸いです。


またコメントにてご指摘いただけますと大変嬉しく思います。m(_ _)m

2.Javaの日付に関するクラス

今回使用したJavaの日付型を扱うときに使用する代表的なクラスは、下記の3つです。
 
クラス 内容 使用した箇所
java.util.Date 日付を扱うクラス ①Dateクラスを使用した回答
java.text.SimpleDateFormat 日付書式を扱うクラス ①Dateクラスを使用した回答
java.util.Calendar 日付の操作、計算などを扱うクラス ②Calendarクラスを使用した回答

3.プログラムの説明

・Dateクラスを使用したコードの説明

・java.util.Dateについて

 

単純に日付を取得したいときや簡単に表示したい時などに使うケースが多いと思います。

使用する際は、インポート(※【import java.util.Date;】を記載)しなければなりません。

①Dateクラスを使用した回答にて【 Date now = new Date();】の部分に使用しています。

この時、変数「now」に現在の日時が格納されています。
 

・java.text.SimpleDateFormatについて

 

日付書式を簡単に設定できる便利なクラスです。


Calendarクラスと比べると分かりやすいと思いますが、Calendarクラスは年月日をそれぞれ抽出していますが、このような手間をかけなくてもSimpleDateFormatクラスを使うことで簡単に表示することができています。


こちらも使用する際は、インポート(※【import java.text.SimpleDateFormat;】を記載)しなければなりません。


日付書式の種類を書きに記載しておきます。

 

書式 内容
G 紀元
y
M
w 年における週
W 月における日
D 年における日
d 月における日
F 月における曜日
E 曜日

 

①Dateクラスを使用した回答にて【SimpleDateFormat date = new SimpleDateFormat("yyyy年MM月dd日(E)HH:mm:ss");と記載している部分で使用しています。


特に("yyyy年MM月dd日(E)HH:mm:ss")の部分では、文字の大小を区別していますのでご注意ください。


また、年月日などの部分を「yyyy/MM/dd (E)」のように自由に変更する事が可能です。

 

・Calendarクラスを使用したコードの説明

・java.util.Calendarについて

 

CalendarクラスはDateクラスよりも多くの機能があります。


日付を表示するだけでなく日付の計算もできるクラスです。


ここでの解説は、今回使用した内容のみにしたいと思います。


Calendarクラスでは定数を指定してメソッドを実行したり、実行結果の戻り値が定数となる場合があります。


少し分かり難い説明かと思いますが、cal.get()メソッドにて取得した年(YEAR)や月(MONTH)などの定数を「int year」「int month」に格納しています。


また、定数の月(MONTH)は、1月が「0」となっている為、コードに「+1」を記載して調整しています。


更に、曜日(DAY_OF_WEEK)は、土曜日の「0」から始まり金曜日の「6」となる為、私は配列を利用して曜日を取得する方法をとっています。


※曜日については、日曜日の「1」から始まり土曜日の「7」となる場合もあるようです。

バージョンの違いかと思いますが、ご自身のPCで試してください。


参考までに「月」と「曜日」の定数を記載しておきます。


月の定数

定数
JANUARY(1月) 0
FEBRUARY(2月) 1
MARCH(3月) 2
APRIL(4月) 3
MAY(5月) 4
JUNE(6月) 5
JULY(7月) 6
AUGUST(8月) 7
SEPTEMBER(9月) 8
OCTOBER(10月) 9
NOVEMBER(11月) 10
DECEMBER(12月) 11

 

 

曜日の定数
定数
SATURDAY(土) 0
SUNDAY(日) 1
MONDAY(月) 2
TUESDAY(火) 3
WEDNESDAY(水) 4
THURSDAY(木) 5
FRIDAY(金) 6

4.まとめ:最後に

駆け出しエンジニアではありますが、勉強した事を思い出しながらできる限り分かりやすく解説してみました。(^^;)

簡単な日付の作成は、紹介した3つのクラス
「java.util.Date」
「java.text.SimpleDateFormat」
「java.util.Calendar」

を学習しておけばコードが書けるようになるかと思います。
 
さらに詳しい内容については、今後も勉強を続けていくつもりですが、下記のサイトでは網羅的に解説されていましたので参考までにリンクを記載しておきます。
 
 
今回は、以上です!
 
 
 
UPSTART!!(=゚ω゚)ノ