代码之家  ›  专栏  ›  技术社区  ›  Said

getDay()方法返回给定日期的星期几无效

  •  7
  • Said  · 技术社区  · 6 年前

    我正在尝试完成名为 Java日期和时间 在HackerRank上。

    任务

    给你一个日期。您只需要编写getDay方法 返回该日期的日期。例如,如果给了您日期, 2017年8月14日,该方法应返回星期一作为当天 日期

    我尽了最大努力去完成这项任务,但我要么 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());
        }
    }
    
    7 回复  |  直到 6 年前
        1
  •  12
  •   Elliott Frisch    6 年前

    你的 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
    

    在新代码中,我会 更喜欢 中的新类 java.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));
    }
    
        2
  •  3
  •   Basil Bourque    6 年前

    java.time.LocalDate

    现代方法使用 Java语言时间 课程。

    1. 进口 java.time.* 访问 LocalDate & DayOfWeek 课程。
    2. getDay 方法,该方法应该是静态的,因为它是在main方法中调用的。
    3. 使用检索localDate of 方法,它以“int”格式接受3个参数。
    4. 转换 getDay公司 int格式的方法参数。
    5. 最后使用检索当天的名称 getDayOfWeek 方法

    有一段关于这个挑战的视频。 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,请参见 三百一十个后端口 项目对于早期的Android,请参阅 ThreeTenABP公司 项目

        3
  •  3
  •   selahaddin aksu    4 年前

    如果要使用LocalDate,可以这样使用

     import java.time.LocalDate;
    
     public static String getDay(int month, int day, int year) {
    
        return LocalDate.of(year, month, day).getDayOfWeek().name();
    
        }
    
        4
  •  1
  •   PawanSinghla    5 年前
        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;    }
    

    必须使用java。时间LocalDate,如果使用直接LocalDate,则显示编译时错误,即找不到符号,因此plz使用java。时间

        5
  •  1
  •   Anonymous    4 年前

    您可以使用新的Java8 DateTime API。

    public static String getDay(int day, int month, int year) 
    {
        LocalDate dt=LocalDate.of(year, month, day);
        System.out.println("day: " + dt.getDayOfWeek().toString());
        return dt.getDayOfWeek().toString();
    }
    

    A. LocalDate 是一个没有时间的约会,对我们来说很好。这个 of 工厂方法构造我们想要的日期。与 Calendar 问题中使用的类,它将月份从1月份的1到12月份的12依次编号。A. 本地日期 在一周中的某一天有一个getter。它从 DayOfWeek 枚举其 toString 方法为我们提供了一个很好的可读字符串,例如 MONDAY ,再次与我们从 日历 .

        6
  •  1
  •   parub    3 年前
    public static String findDay(int month, int day, int year) {
     Calendar cal = Calendar.getInstance();
        cal.set(year, (month - 1), day);
        String dayOfWeek = cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
        return dayOfWeek.toUpperCase();
    }
    
        7
  •  1
  •   Isurie    3 年前

    使用java格式化数据和时间。util date和calendar如下所示,其中需要使用java处理异常。文本java 7中的SimpleDataFormat。

    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);
    
    }
    

    使用java格式化日期和时间。java 8中的时间类如下所示,它是不可变的,并且是线程安全的。

    import java.time.LocalDateTime; 
    import java.time.format.DateTimeFormatter; 
    
    public class Main {
      public static void main(String[] args) {
        LocalDateTime dateObj = LocalDateTime.now();
        System.out.println("Before formatting: " + dateObj);
        DateTimeFormatter formatObj = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
    
        String formattedDate = dateObj.format(formatObj);
        System.out.println("After formatting: " + formattedDate);
      }
    }