タイトル説明
世紀の終わりの週に、
カルトはかつて1999年12月31日が世界の終わりであると主張しました。もちろん、噂は自滅的です。ある世紀の終わり、12月31日、月曜日なら…と言う人もいます。
おもしろいのは、世紀末の12月31日が月曜日になれないことです!!そこで、「噂メーカー」が日曜日に変更しました...
1999年の12月31日は金曜日です。質問したいのですが、将来、私たちに最も近い世紀末の年(つまり、xx99年)のどれが、たまたま日曜日(つまり、日曜日)になるのでしょうか。
年に答えてください(この4桁の整数を書くだけで、12月31日などの冗長な情報は書かないでください)
問題解決のアイデア
方法1:APIドキュメントでCalendarクラスを使用します。
制限:1970年より前の日付の質問は使用できません。
Calendarクラスは抽象クラスであり、特定の瞬間と、YEAR、MONTH、DAY_OF_MONTH、HOURなどの一連のカレンダーフィールドとの間の変換のためのいくつかのメソッドを提供し、カレンダーフィールドを操作するためのいくつかのメソッドを提供します(取得など)。翌週の日付)メソッド。モーメントはミリ秒で表すことができます。これは、エポックからのオフセットです(つまり、1970年1月1日の00:00:00.000、グリニッジ標準時、グレゴリオ暦)。
参照コード
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
for (int year = 1999; year < 10000; year += 100) {
calendar.set(year, 11, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == 1) {
System.out.println(year);
break;
}
}
}
}
演算結果:2299
注:この質問の月の0は1月、12月は11である必要があり、週の1は日曜日を表します。
方法2:キムラーソンの計算式
y:年 m:月 d:日 w:星期几
w= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7
注意:
1.w的取值范围是0,1,2,3,4,5,6,分别代表星期日,星期一,星期二,星期三,星期四,星期五,星期六。
2.今年的1、2月要换成去年的13、14月
eg:2020-1-1则换算成2019-13-1来代入公式计算。
3.这个公式可以直接计算出那个日期是星期几,但请注意!这类问题如果假设和真实情况不符的时候要记得换上偏移量,比如问题假设某个日期是星期一,而真实情况这天是星期二,那么我们计算出来的星期几也要-1,但请保证再1~7的环中。
参照コード
public class Main {
public static void main(String[] args) {
int y = 1999;
int m = 12;
int d = 31;
int w;
for(;y<10000;y+=100) {
w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
if(w==0) {
System.out.println(y);
break;
}
}
}
}
方法3:Excelツールの
制限:1970年より前の問題には使用できません。
利点:高速で時間を節約できます
-
日付を入力し、セル形式を設定し、日付として入力します
-
B1のタイプをaaaaに変更し、B1に= A1と入力します
-
確認後、A2に2099/12/31と入力します
-
A1とA2を選択した後、プルダウンは100年のサイクルで増加する可能性があります
-
B1をプルダウンして
2299を取得します
初心者の作成と学習、間違いがある場合は、ポインタを与えてください、ありがとう!