给定日期的 return 星期几的 getDay() 方法不起作用
getDay() method to return day of the week for a given date not works
我正在尝试在 HackerRank 上完成名为 Java 日期和时间 的任务。
任务
You are given a date. You just need to write the method, getDay, which
returns the day on that date.For example, if you are given the date,
August 14th 2017, the method should return MONDAY as the day on that
date.
我已尽力完成任务,但得到 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
(Java8+)中的新类,以及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.*
to access LocalDate
& DayOfWeek
类.
- 编写
getDay
方法,该方法应该是静态的,因为它在 main 方法中被调用。
- 使用
of
方法检索 localDate,该方法采用 "int" 格式的 3 个参数。
- 将
getDay
方法参数转换为 int 格式。
- 最终使用
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 项目。
使用 java.util 日期和日历格式化数据和时间如下,其中需要处理 java 中 java.text.SimpleDateFormat 的异常 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 8 中使用 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 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。
您可以使用新的 Java8 日期时间 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
class 相反,它从一月的 1 到十二月的 12 对月份进行了合理的编号。 LocalDate
有一个 getter 表示星期几。它 returns 来自 DayOfWeek
枚举的常量,其 toString
方法为我们提供了一个很好的可读字符串,例如 MONDAY
,再次与我们从 Calendar
获得的内容形成对比.
如果你想使用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 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();
}
我正在尝试在 HackerRank 上完成名为 Java 日期和时间 的任务。
任务
You are given a date. You just need to write the method, getDay, which returns the day on that date.For example, if you are given the date, August 14th 2017, the method should return MONDAY as the day on that date.
我已尽力完成任务,但得到 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
(Java8+)中的新类,以及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.*
to accessLocalDate
&DayOfWeek
类. - 编写
getDay
方法,该方法应该是静态的,因为它在 main 方法中被调用。 - 使用
of
方法检索 localDate,该方法采用 "int" 格式的 3 个参数。 - 将
getDay
方法参数转换为 int 格式。 - 最终使用
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 项目。
使用 java.util 日期和日历格式化数据和时间如下,其中需要处理 java 中 java.text.SimpleDateFormat 的异常 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 8 中使用 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 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。
您可以使用新的 Java8 日期时间 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
class 相反,它从一月的 1 到十二月的 12 对月份进行了合理的编号。 LocalDate
有一个 getter 表示星期几。它 returns 来自 DayOfWeek
枚举的常量,其 toString
方法为我们提供了一个很好的可读字符串,例如 MONDAY
,再次与我们从 Calendar
获得的内容形成对比.
如果你想使用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 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();
}