12

次のように、今日の日付から現在の週を表示する小さなプログラムがあります。

GregorianCalendar gc = new GregorianCalendar();
int day = 0;
gc.add(Calendar.DATE, day);

そして、週番号を表示する JLabel:

JLabel week = new JLabel("Week " + gc.get(Calendar.WEEK_OF_YEAR));

だから今、日付を入力できる JTextField が欲しいと思います。JLabel はその日付の週番号で更新されます。私はJavaが初めてなので、これを行う方法が本当にわかりません。入力を文字列として保存する必要がありますか? 整数?また、どのような形式にする必要がありますか (yyyyMMdd など)? 誰かが私を助けることができれば、私はそれを感謝します!

4

8 に答える 8

22

入力を文字列として保存する必要がありますか? 整数?

を使用する場合JTextField、ユーザーから取得する入力は です。これは、選択した日付形式に応じて、日付にや などのString文字が含まれる可能性があるためです。もちろん、入力フィールドがすでに日付形式を検証しており、日、月、年に個別の値を返す、より洗練された入力方法を使用することもできますが、使用する方が簡単です。.-JTextField

また、どのような形式にする必要がありますか (yyyyMMdd など)?

これは要件によって異なります。SimpleDateFormatクラスを使用して、任意の日付形式を解析できます。

String input = "20130507";
String format = "yyyyMMdd";

SimpleDateFormat df = new SimpleDateFormat(format);
Date date = df.parse(input);

Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.WEEK_OF_YEAR);

ただし、ロケールに固有の日付形式を使用する可能性が高くなります。

import java.text.DateFormat;

DateFormat defaultFormat = DateFormat.getDateInstance();
Date date = defaultFormat.parse(input);

どの形式を使用するかについてユーザーにヒントを与えるには、DateFormatを aにキャストしSimpleDateFormatてパターン文字列を取得する必要があります。

if (defaultFormat instanceof SimpleDateFormat) {
   SimpleDateFormat sdf = (SimpleDateFormat)defaultFormat;
   System.out.println("Use date format like: " + sdf.toPattern());
}

上記の @adenoyelle のコメントを思い出してください: Write unit tests for your date parsing code

于 2013-05-07T12:19:42.753 に答える
3

You can store the date as a String, and the user can enter it in pretty much any format you specify. You just need to use a DateFormat object to interpret the date that they enter. For example, see the top answer on Convert String to Calendar Object in Java.

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));

To read the date from a JTextField, you could replace that with something like:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // or any other date format
cal.setTime(sdf.parse(dateTextField.getText()));

Then you just need to read the week number from cal in the same way you showed in the question. (This is a simplified example. You'd need to handle the potential ParseException thrown by the DateFormat parse method.)

于 2013-05-07T12:20:33.953 に答える
1
public static int getWeek() {
        return Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);
    }

正常に動作し、現在のリアルタイムの週を返します

于 2015-02-15T12:59:53.990 に答える