web-dev-qa-db-fra.com

la méthode getDay () pour retourner le jour de la semaine pour une date donnée ne fonctionne pas

J'essaie de terminer la tâche nommée Java Date and Time sur HackerRank.

Tâche

On vous donne une date. Vous avez juste besoin d'écrire la méthode, getDay, qui renvoie le jour à cette date.Par exemple, si on vous donne la date, Le 14 août 2017, la méthode devrait renvoyer LUNDI comme le jour sur celui-ci rendez-vous amoureux.

J'ai fait de mon mieux pour accomplir cette tâche, mais j'obtiens soit le résultat null, soit l'erreur NullPointerException. Je me demande où je me trompe. Ci-dessous mon code:

Merci d'avance!

Mon code:

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());
    }
}
4
Said

Votre return est éteint; vous ne voulez pas cal.get dans la première colonne de cal.getDisplayName. Actuellement, je reçois le nom du mois avec votre code. Changer cela en

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

Et appelle ça comme

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

Et je reçois (comme prévu)

Monday

Dans le nouveau code, je préférerais les nouvelles classes de Java.time (Java 8+) et un 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));
}
7
Elliott Frisch

Java.time.LocalDate

L'approche moderne utilise les classes Java.time

  1. Importez Java.time.* pour accéder à LocalDate & DayOfWeek classes.
  2. Écrivez la méthode getDay qui devrait être statique car elle est appelée dans la méthode principale.
  3. Récupérez localDate en utilisant la méthode of qui prend 3 arguments au format "int".
  4. convertit les arguments de la méthode getDay au format int.
  5. récupère enfin le nom de ce jour en utilisant la méthode getDayOfWeek.

Il y a une vidéo de ce défi . 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`. 

Pour Java 6 et 7, voir le projet ThreeTen-Backport. Pour les versions antérieures d'Android, voir le projet ThreeTenABP.

3
Ravi Solanki
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