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

hl0ma9xz  于 2023-08-01  发布在  Java
关注(0)|答案(8)|浏览(135)

我正在努力完成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());
    }
}

字符串

wkyowqbh

wkyowqbh1#

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

bq3bfh9z

bq3bfh9z2#

第一个月

现代的方法使用 java.time 类。
1.导入java.time.*以访问LocalDateDayOfWeek类。
1.编写getDay方法,该方法应该是静态的,因为它是在主方法中调用的。
1.使用of方法检索localDate,该方法采用3个“int”格式的参数。
1.将getDay方法参数转换为int格式。
1.最后使用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,请参见 ThreeTen-Backport 项目。对于早期版本的Android,请参见 ThreeTenABP 项目。

0x6upsns

0x6upsns3#

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

import java.time.LocalDate;

 public static String getDay(int month, int day, int year) {

    return LocalDate.of(year, month, day).getDayOfWeek().name();

    }

字符串

3mpgtkmj

3mpgtkmj4#

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.time.LocalDate,如果你直接使用LocalDate,它会显示编译时错误,即找不到符号,所以请使用java.time。

eoxn13cs

eoxn13cs5#

您可以使用新的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();
}

字符串
LocalDate是一个没有时间的日期,所以对于我们的目的来说很好。of工厂方法构造我们想要的日期。与问题中使用的Calendar类相反,它对月份进行了合理的编号,从1月份的1到12月份的12。LocalDate有一个星期几的getter。它从DayOfWeek枚举返回一个常量,toString方法为我们提供了一个可读的字符串,如MONDAY,再次与我们从Calendar得到的相反。

dwthyt8l

dwthyt8l6#

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

字符串

iugsix8n

iugsix8n7#

使用java.utildate和calendar格式化数据和时间,如下所示,其中需要处理java7中java.text.SimpleDateFormat的异常

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

}

字符串
在java8中使用java.time类格式化日期和时间,如下所示,它是不可变的和线程安全的。

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

q0qdq0h2

q0qdq0h28#

public static String findDay(int month, int day, int year) {
     Calendar rightNow = Calendar.getInstance();
        rightNow.set(year, month-1, day);;
        switch(rightNow.get(Calendar.DAY_OF_WEEK)) {
            case Calendar.SUNDAY:
                return "SUNDAY";
            case Calendar.MONDAY:
                return "MONDAY";
            case Calendar.TUESDAY:
                return "TUEDAY";
            case Calendar.WEDNESDAY:
                return "WEDNESDAY";
            case Calendar.THURSDAY:
                return "THURSDAY";
            case Calendar.FRIDAY:
                return "FRIDAY";
            case Calendar.SATURDAY:
                return "SATURDAY";            
   
}

字符串
}

相关问题