web-dev-qa-db-ja.com

特定の日付の曜日を返すgetDay()メソッドが機能しない

HackerRankでJava Date and Timeという名前のタスクを完了しようとしています。

タスク

日付が与えられます。たとえば、その日の日付を返すgetDayメソッドを記述するだけで済みます。たとえば、2017年8月14日という日付が与えられた場合、メソッドはその日の日付としてMONDAYを返します。

タスクを実行するために最善を尽くしましたが、nullの結果またはNullPointerExceptionのエラーが表示されます。どこで間違っているのだろうか。以下は私のコードです:

前もって感謝します!

マイコード:

import Java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String month = in.next();
        String day = in.next();
        String year = in.next();

        System.out.println(getDay(day, month, year));
    }

    public static String getDay(String day, String month, String year) {
        Calendar cal = Calendar.getInstance();
        cal.set(Integer.valueOf(year), (Integer.valueOf(month) - 1), Integer.valueOf(day));
        return cal.getDisplayName(cal.get(Calendar.DAY_OF_WEEK), Calendar.LONG, Locale.getDefault());
    }
}
5
Said

returnはオフです。 cal.getの最初の列にcal.getDisplayNameは必要ありません。現在、コードで月の名前を取得しています。それを変更する

return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

そしてそれを

public static void main(String[] args) {
    System.out.println(getDay("14", "8", "2017"));
}

そして、私は(予想どおり)得る

Monday

新しいコードでは、preferJava.time(Java 8+)の新しいクラス、およびDateTimeFormatter-のようになります。

public static String getDay(String day, String month, String year) {
    int y = Integer.parseInt(year), m = Integer.parseInt(month), d = Integer.parseInt(day);
    return Java.time.format.DateTimeFormatter.ofPattern("EEEE")
            .format(LocalDate.of(y, m, d));
}
9
Elliott Frisch

Java.time.LocalDate

最新のアプローチでは、Java.timeクラスを使用します。

  1. インポート Java.time.* アクセスするには LocalDateDayOfWeek クラス。
  2. Mainメソッドで呼び出されるため、静的である必要があるgetDayメソッドを記述します。
  3. 「int」形式の3つの引数を取るofメソッドを使用してlocalDateを取得します。
  4. getDayメソッドの引数をint形式に変換します。
  5. 最後にgetDayOfWeekメソッドを使用してその日の名前を取得します。

この課題に関するビデオが1つあります。 Java Date and Time Hackerrank

LocalDate                 // Represent a date-only value, without time-of-day and without time zone.
.of( 2018 , 1 , 23 )      // Pass year-month-day, 1-12 for January-December. 
.getDayOfWeek()           // Obtain a `DayOfWeek` enum object.
.getDisplayName(          // Automatically localize the name of the day-of-week.
    TextStyle.FULL ,      // How long or abbreviated.
    Locale.US             // Or Locale.CANADA_FRENCH or so on.
)                         // Returns `String` such as `Monday` or `lundi`. 

Java 6&7については、ThreeTen-Backportプロジェクトを参照してください。以前のAndroidについては、ThreeTenABPプロジェクト。

3
Ravi Solanki
    public static String getDay(int month, int day, int year) {
   String  res= Java.time.format.DateTimeFormatter.ofPattern("EEEE")
        .format(Java.time.LocalDate.of(year, month, day));
   return res;    }

uが直接LocalDateを使用する場合は、Java.time.LocalDateを使用する必要があります。つまり、ショーのコンパイル時エラー、つまりシンボルが見つからないため、plzはJava.timeを使用します。

1
PawanSinghla
public static void main(String[] args){
    String inputDateStr = String.format("%s/%s/%s", 23, 04, 1995);
    Date inputDate = null;
    try {
        inputDate = new SimpleDateFormat("dd/MM/yyyy").parse(inputDateStr);
    } catch (ParseException ex) {
        Logger.getLogger(JavaApplication28.class.getName()).log(Level.SEVERE, null, ex);
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(inputDate);
    String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US).toUpperCase();
    System.out.println(dayOfWeek);

}
0
isurie