web-dev-qa-db-ja.com

Javaで入力として日付を設定するにはどうすればよいですか?

日付を変数に設定する直接的な方法はありますか?設計時に日付がわからないので、ユーザーが指定する必要があります。次のコードを試しましたが機能しません。カレンダーmyDate = new GregorianCalendar(int year、int month、int day);

5
user3159060

次のコードを試してください。入力した文字列を解析して日付を作成しています

// To take the input
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the Date ");

String date = scanner.next();

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
Date date2=null;
try {
    //Parsing the String
    date2 = dateFormat.parse(date);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
System.out.println(date2);
8
sitakant

tl; dr

 LocalDate.of( 2026 , 1 , 23 )  // Pass: ( year , month , day )

Java.time

他のいくつかの回答は、ユーザーからの入力を収集する方法を示すのに正しいですが、Java.timeクラスに取って代わられた、現在はレガシーである厄介な古い日時クラスを使用しています。

LocalDate

時刻とタイムゾーンのない日付のみの値の場合、 LocalDate クラスを使用します。

LocalDate ld = LocalDate.of( 2026 , 1 , 23 );

ここで説明するように、入力文字列を整数として解析します。 Javaで文字列を整数に変換するにはどうすればよいですか。

int y = Integer.parseInt( yearInput );
int m = Integer.parseInt( monthInput );  // 1-12 for January-December.
int d = Integer.parseInt( dayInput );

LocalDate ld = LocalDate.of( y , m , d );

 Table of date-time types in Java, both modern and legacy. 


Java.timeについて

Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、厄介な古い レガシー 日付に取って代わります。 Java.util.DateCalendar 、& SimpleDateFormat などの-timeクラス。

Joda-Time プロジェクトは メンテナンスモード になり、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracleチュートリアル を参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様は JSR 310 です。

Java.timeクラスはどこで入手できますか?

  • Java SE 8Java SE 9 以降
    • ビルトイン。
    • 標準の一部Java APIがバンドルされた実装。
    • Java 9には、いくつかのマイナーな機能と修正が追加されています。
  • Java SE 6 および Java SE 7
  • Android
    • 以降のバージョンのAndroidには、Java.timeクラスの実装がバンドルされています。
    • 以前のAndroidの場合、 ThreeTenABP プロジェクトはThreeTen-Backport (上記の通り)。 ThreeTenABPの使用方法… を参照してください。

ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明する場です。 IntervalYearWeekYearQuartermore などの便利なクラスがここにあります。

3
Basil Bourque

@ SK08回答を変更し、年、月、日をユーザーからの入力として受け取り、日付を返すメソッドを作成しました。

    Scanner scanner = new Scanner(System.in);
    String str[] = {"year", "month", "day" };
    String date = "";

    for(int i=0; i<3; i++) {
        System.out.println("Enter " + str[i] + ": ");
        date = date + scanner.next() + "/";
    }
    date = date.substring(0, date.length()-1);
    System.out.println("date: "+ date); 

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    Date parsedDate = null;

    try {
        parsedDate = dateFormat.parse(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return parsedDate;
1
Vikas

これはうまくいきました!

package javaapplication2;
//@author Ibrahim Yesilay
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.util.Scanner;
public class JavaApplication2 {  
    public static void main(String[] args) throws ParseException {
    Scanner giris = new Scanner(System.in);        
        System.out.println("gün:");
        int d = giris.nextInt();
        System.out.println("ay:");
        int m = giris.nextInt();
        System.out.println("yil:");
        int y = giris.nextInt();
        String tarih;
        tarih = Integer.toString(d) + "/" + Integer.toString(m) + "/" + Integer.toString(y);  
        System.out.println("Tarih : " + tarih); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date girilentarih = null;
        girilentarih = dateFormat.parse(tarih);
        System.out.println(dateFormat.format(girilentarih));      
    }   
}
0
Ibrahim Yesilay

これは問題なく機能し、setlenient関数を使用して日付を検証することもできます。

import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.ArrayList;
import Java.util.Date;
import Java.util.Scanner;

public class Datinput {

    public static void main(String args[]) {
        int n;
        ArrayList<String> al = new ArrayList<String>();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        String da[] = new String[n];
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        sdf.setLenient(false);
        Date date[] = new Date[n];
        in.nextLine();
        for (int i = 0; i < da.length; i++) {
            da[i] = in.nextLine();
        }
        for (int i = 0; i < da.length; i++) {

            try {
                date[i] = sdf.parse(da[i]);
            } catch (ParseException e) {

                e.printStackTrace();
            }
        }

        in.close();
    }
}
0
Mohit Miglani