getDay()方法可以在给定日期中返回一周中的一天



我正在尝试完成hackerrank上名为 java日期和时间的任务。

任务

您有一个日期。您只需要编写该方法,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());
    }
}

您的 return不在;您不需要cal.getDisplayName的第一列中的cal.get。目前,我获得了您的代码的月份名称。将其更改为

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

java.time.LocalDate

现代方法使用 java.time 类。

  1. 导入java.time.*访问LocalDate&DayOfWeek课程。
  2. getDay方法应该是静态的,因为它在主要方法中称为
  3. 使用of方法检索localdate,以" int"格式采用3个参数。
  4. 以int格式转换 getDay方法参数。
  5. 最终使用getDayOfWeek方法检索当天的名称。

有一个有关此挑战的视频。Java日期和时间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 项目。

如果要使用localdate,则可以这样使用

 import java.time.LocalDate;
 public static String getDay(int month, int day, int year) {
    return LocalDate.of(year, month, day).getDayOfWeek().name();
    }
    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,如果您将使用Direct LocalDate的show compile compile时间错误,即找不到符号,所以请使用java.time。

您可以使用新的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日的1月1日。LocalDate在一周中的一天中有一个收获。它从DayOfWeek枚举中返回一个常数,其toString方法为我们提供了一个不错的可读字符串,例如MONDAY,与我们从Calendar获得的相反。

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

使用java.util日期和日历进行格式化数据和时间,如下所示,它需要使用Java.text.simpledateformat在Java 7中处理异常。

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

}

最新更新