【ブルーブリッジカップJavaBグループの本当の質問の詳細説明】世紀末の週(2013)

タイトル説明

世紀の終わりの週に、
カルトはかつて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年より前の問題には使用できません。
利点:高速で時間を節約できます

  1. 日付を入力し、セル形式を設定し、日付として入力します
    ここに画像の説明を挿入
    ここに画像の説明を挿入

  2. B1のタイプをaaaaに変更し、B1に= A1と入力します
    ここに画像の説明を挿入
    ここに画像の説明を挿入

  3. 確認後、A2に2099/12/31と入力します

  4. A1とA2を選択した後、プルダウンは100年のサイクルで増加する可能性があります
    ここに画像の説明を挿入

  5. B1をプルダウンして
    ここに画像の説明を挿入
    2299取得ます

初心者の作成と学習、間違いがある場合は、ポインタを与えてください、ありがとう!

おすすめ

転載: blog.csdn.net/m0_46226318/article/details/113057822