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());
}
}
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));
}
Java.time.LocalDate
最新のアプローチでは、Java.timeクラスを使用します。
Java.time.*
アクセスするには LocalDate
& DayOfWeek
クラス。getDay
メソッドを記述します。of
メソッドを使用してlocalDateを取得します。getDay
メソッドの引数をint形式に変換します。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プロジェクト。
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を使用します。
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);
}