質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

11332閲覧

入力した日付から過去か未来かを表示する

Kyouko_kisaragi

総合スコア48

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/08/17 11:54

あと一歩だと思うのですが、思いつきません。助けてください。

Javaで、コマンドライン引数から適当な年月日を入力し、今日の日付と比べて過去か未来か今日か、を判断するプログラムを作成しています。
現在以下のコードができています。

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Calendar; class dateCheckProgram{ public static void main(String[] args) { SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); Calendar calendar = Calendar.getInstance(); Calendar nowCalendar = Calendar.getInstance(); String date = args[0]; if (args.length > 0){ try { calendar.setTime(format.parse(date)); int nowYear = nowCalendar.get(Calendar.YEAR); int nowMonth = nowCalendar.get(Calendar.MONTH) + 1; int nowDay = nowCalendar.get(Calendar.DATE); nowCalendar.set(nowYear, nowMonth, nowDay); int diff = calendar.compareTo(nowCalendar); if (diff == 0){ System.out.println(date + "は今日です"); } else if (diff > 0){ System.out.println(date + "は未来です"); } else { System.out.println(date + "は過去です"); } } catch (ParseException e){ System.out.println("入力値がyyyy/mm/dd形式ではありません"); }

『nowCalendar.set』で設定した今日の日付が、時間・分・秒まで入ってしまっているため、きちんとした判定ができないようです。
調べたところ、http://qiita.com/kazuhirokomoda/items/e5898aa9b6855adf7433にほぼ同じ対策が掲載されていました。
が、『import org.apache.commons.lang.time.DateUtils;』が自分の環境で使えないようです。

DateUtilsを使わないで判断する方法はないでしょうか。
教えてくださると助かります。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

###方法1 - 文字列化して比較する
冷静に考えればわかりますが、日付を各フィールド同じ桁数にして文字列化すれば、
日付の後先と文字列を辞書式に並べた後先は一致します。

java

1import java.text.ParseException; 2import java.text.SimpleDateFormat; 3import java.util.Date; 4import java.util.Calendar; 5 6// クラス名は大文字で始めるのが慣習 7class DateCheckProgram{ 8 public static void main(String[] args) { 9 10 SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); 11 Calendar nowCalendar = Calendar.getInstance(); 12 13 String date = args[0]; 14 15 if (args.length > 0){ 16 try { 17 // 入力が正しい日付かをチェックするためにこれは残す 18 format.parse(date); 19 // 現在の日付を文字列化 20 String today = format.format(nowCalendar.getTime()); 21 22 int diff = date.compareTo(today); 23 24 if (diff == 0){ 25 System.out.println(date + "は今日です"); 26 } else if (diff > 0){ 27 System.out.println(date + "は未来です"); 28 } else { 29 System.out.println(date + "は過去です"); 30 } 31 32 33 } catch (ParseException e){ 34 System.out.println("入力値がyyyy/mm/dd形式ではありません"); 35 } 36 } 37 } 38}

###方法2 - Java8のLocalDateを使う
Java8で登場したDate-Time APIにあるLocalDateは、年月日だけの情報を扱えます。
Calendarを今回のような用途で使う際の不便さが消えます。

java

1import java.time.LocalDate; 2import java.time.format.DateTimeFormatter; 3import java.time.format.DateTimeParseException; 4 5public class DateCheckProgram2 { 6 7 public static void main(String[] args) { 8 9 try { 10 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu/MM/dd"); 11 LocalDate date = LocalDate.parse(args[0], formatter); 12 LocalDate today = LocalDate.now(); 13 int diff = date.compareTo(today); 14 if (diff == 0){ 15 System.out.println(date + "は今日です"); 16 } else if (diff > 0){ 17 System.out.println(date + "は未来です"); 18 } else { 19 System.out.println(date + "は過去です"); 20 } 21 } catch (DateTimeParseException e) { 22 System.out.println("入力値がyyyy/mm/dd形式ではありません"); 23 } 24 } 25 26} 27

投稿2017/08/17 16:59

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問