我正在努力完成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());
}
}
字符串
8条答案
按热度按时间wkyowqbh1#
您的
return
已关闭;你不希望cal.get
出现在cal.getDisplayName
的第一列。目前,我用你的代码得到月份名称。把那个改成字符串
并称之为像
型
我得到了(正如预期的那样)
型
在新代码中,我更喜欢
java.time
(Java 8+)中的新类,以及类似DateTimeFormatter
的类。型
bq3bfh9z2#
第一个月
现代的方法使用 java.time 类。
1.导入
java.time.*
以访问LocalDate
和DayOfWeek
类。1.编写
getDay
方法,该方法应该是静态的,因为它是在主方法中调用的。1.使用
of
方法检索localDate,该方法采用3个“int”格式的参数。1.将
getDay
方法参数转换为int格式。1.最后使用
getDayOfWeek
方法检索日期名称。有一个关于这个挑战的视频。Java Date and Time Hackerrank的
字符串
对于Java 6和7,请参见 ThreeTen-Backport 项目。对于早期版本的Android,请参见 ThreeTenABP 项目。
0x6upsns3#
如果要使用LocalDate,可以这样使用
字符串
3mpgtkmj4#
字符串
必须使用java.time.LocalDate,如果你直接使用LocalDate,它会显示编译时错误,即找不到符号,所以请使用java.time。
eoxn13cs5#
您可以使用新的Java8 DateTime API。
字符串
LocalDate
是一个没有时间的日期,所以对于我们的目的来说很好。of
工厂方法构造我们想要的日期。与问题中使用的Calendar
类相反,它对月份进行了合理的编号,从1月份的1到12月份的12。LocalDate
有一个星期几的getter。它从DayOfWeek
枚举返回一个常量,toString
方法为我们提供了一个可读的字符串,如MONDAY
,再次与我们从Calendar
得到的相反。dwthyt8l6#
字符串
iugsix8n7#
使用java.utildate和calendar格式化数据和时间,如下所示,其中需要处理java7中java.text.SimpleDateFormat的异常
字符串
在java8中使用java.time类格式化日期和时间,如下所示,它是不可变的和线程安全的。
型
q0qdq0h28#
字符串
}