【LeetCode每日一题】1185.一周中的第几天(模拟+调用库函数:三种方法)
2023-12-30
一周中的第几天
?
- 提示:给出的日期一定是在
1971
到2100
年之间的有效日期。
方法一:模拟
思路
-
1.可以根据1970年的最后一天(周四),计算出和输入日期间隔了几天(ans+之前的年份天数和+当前的月份天数和+输日的天数)
-
2.求出具体的天数之后进行取模,得到具体的星期
步骤
1.定义一个字符串类型的数组,大小为7,记录星期字典
定义一个int类型的数组,大小为12,记录12个月份分别对应的天数(闰年进行判断)
2.定义一个初始天数ans=4(从周四开始)
3.从1971年开始遍历,直到输入的年份,判断当前年是否为闰年,初始值加上对应的天数
4.遍历月份直到输入月份,二月的情况根据是否是闰年来加上额外的一天
5.最后加上输入的天数,所求之和取模
static String[] week =new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//每周对应的星期
static int[] nums = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//每个月对应的天数
public String dayOfTheWeek(int day, int month, int year) {
int ans = 4;//初始值为4,从周四开始
for (int i = 1971; i < year; i++) {
boolean isLeapYear = (i % 4 == 0 && i % 100 != 0) || i % 400 == 0;
//判断是否为闰年
ans += isLeapYear ? 366 : 365;
//是闰年加366,不是加355
}
for (int i = 1; i < month; i++) {
ans += nums[i - 1];
//之前的月份数之和
if (i == 2 && ((year % 4 == 0 && year% 100 != 0) || year % 400 == 0)){
ans++;//如果当前是闰年,单独加1
}
}
ans += day;//加上输入的天数
return week[ans % 7];
//求模返回对应星期
}
方法二:调用库函数
1.使用LocalDate.of(year, month, day)
创建了一个LocalDate
对象date
,表示给定的日期。LocalDate
是Java 8中新增的日期类,用于处理日期相关操作。(Java8新增)
2.通过调用date.getDayOfWeek()
方法获取该日期的星期几信息,getDayOfWeek()
返回的是一个DayOfWeek
枚举类型,表示星期几。
3.最后,通过调用getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH)
方法,将星期几信息以全名的形式返回,使用英语的地区设置。
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.*;
class Solution {
public String dayOfTheWeek2(int day, int month, int year) {
LocalDate date = LocalDate.of(year, month, day);
//创建了一个`LocalDate`对象`date`,表示给定的日期
return date.getDayOfWeek().getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH);
//方法获取该日期的星期几信息
//将星期几信息以全名的形式返回,使用英语的地区设置
}
方法三:调用库函数
1.首先声明了一个私有的静态变量calendar
,并调用其静态方法getInstance()
获取一个默认时区的Calendar
实例。然后声明了一个私有的静态变量weekFormat
,它是一个SimpleDateFormat
对象,用于格式化星期几信息。
2.使用set(year, month - 1, day)
方法将calendar
设置为给定日期。由于Calendar
中的月份从0开始,所以需要将传入的month
减去1
3.使用weekFormat.format(calendar.getTime())
方法将calendar
中的时间格式化为星期几的字符串,其中weekFormat
是一个SimpleDateFormat
对象,通过设置格式为"EEEE"来表示星期几的全名形式
private static final Calendar calendar = Calendar.getInstance();
//获取一个默认时区的`Calendar`实例
private static final SimpleDateFormat weekFormat = new SimpleDateFormat("EEEE");
//格式化星期几信息
public String dayOfTheWeek3(int day, int month, int year) {
calendar.set(year, month - 1, day);
// 将`calendar`设置为给定日期
return weekFormat.format(calendar.getTime());
//`calendar`中的时间格式化为星期几的字符串
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!