English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
1, Codice Java per implementare un calendario perpetuo:
package calendar; import java.util.Scanner; // Progetto calendario public class RiLi{ public static void main(String[] args){ Scanner A=new Scanner(System.in); System.out.println("Inserisci l'anno: "); int year=A.nextInt(); System.out.println("Inserisci il mese: "); int month=A.nextInt(); int sum=0; for(int i=1900;i<year;i++){ if(i%4==0&&i%100!=0||i%400==0){ sum=sum+366; } else { sum=sum+365; } } for(int i=1;i<month;i++){ if(i==2){ if(year%4==0&&year%100!=0||year%400==0){ sum=sum+29;} else{ sum=sum+28; } } else { if(i==4||i==6||i==9||i==11){ sum += 30; } else { sum += 31; } } } sum = sum + 1; int wekday = sum % 7; System.out.println("日\t一\t二\t三\t四\t五\t六"); for (int i = 1; i <= wekday; i++) { System.out.print("\t"); } int f = 0; if (month == 4 || month == 6 || month == 9 || month == 11) { f = 30;} if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {f = 31;} if (month == 2) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {f = 29;} else {f = 28;} } for (int i = 1; i <= f; i++) { if (sum % 7 == 6) { System.out.print(i + "\n"); } else { System.out.print(i + "\t"); } sum++; } } }
Secondo. Un calendario universale Java, molto semplice, che mostra l'anno, il mese, il giorno, il giorno della settimana, la settimana corrente, mostra gli anni bisestili, stampa il calendario universale, ecc., può anche mostrare il giorno dell'anno corrente e il giorno della settimana di una data specifica, utilizza la formula di Kim Larsen, W = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) mod 7, nella formula d rappresenta il numero di giorni del mese, m rappresenta il numero del mese, y rappresenta il numero dell'anno. Attenzione: c'è un punto diverso nella formula rispetto alle altre formule: considera gennaio e febbraio come il tredicesimo e il quattordicesimo mese dell'anno precedente, ad esempio: se è il 10 gennaio 2004, lo si trasforma in: 10 gennaio 2003 per calcolare la formula.
public class myCalendar { //以下程序段是用来计算输入日期为该年的第几天的 public static int cptDay(int year, int month, int day) { byte dayadd[] = {1, -2, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1}; //用来存储每个月天数和30的差值 int daycount = 0; //这是天数daycount计数器,初始化为0 for (int i = 0; i < month - 1; i++) daycount += (30 + dayadd[i]); daycount+=day; return (month>2)?daycount+isLeap(year):daycount; } //Segmento di codice per determinare l'anno bisestile, l'anno bisestile restituisce 1, l'anno comune restituisce 0 public static int isLeap(int year){ if((year%400==0)||((year%4==0)&&(year%100!=0))) return 1; return 0; } //Calcolare in quale giorno della settimana è la data di input //Utilizza la formula di calcolo di Kim Larsen //W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 //Nella formula, d rappresenta il numero di giorni del mese, m rappresenta il numero del mese, y rappresenta il numero dell'anno. //Attenzione: c'è una differenza tra la formula e altre formule: //Considerare gennaio e febbraio come il dodicesimo e tredicesimo mese dell'anno precedente, ad esempio: se è il 10-1-2004, viene convertito in: 2003-13-10 per essere inserito nella formula di calcolo. public static int getWeek(int year,int month,int day){ if(month<3) { month+=12; year--;} return (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; } //Il seguente segmento di codice è utilizzato per calcolare la settimana dell'anno per la data di input public static int weekCount(int year,int month,int day){ int dayCnt = cptDay(year,month,day); int weekminus = getWeek(year,month,day)-getWeek(year,1,1); int weekCnt = 0; if(dayCnt%7==0) weekCnt = dayCnt/7+((weekminus>0)?1:0); else weekCnt = dayCnt/7+((weekminus>0)?2:1); return weekCnt; } //Stampare il calendario perpetuo public static void printCal(int year){ byte dayadd[]={0,1,-2,1,0,1,0,1,1,0,1,0,1}; // Anche qui, la differenza tra il numero di giorni del mese e 30, notare che dayadd[0] non viene utilizzato int wkpoint = getWeek(year,1,1); // wkpoint viene utilizzato per indicare la settimana corrente della data attuale int t = 0; // t viene utilizzato come marcatore per risolvere il problema del mese di febbraio con 29 giorni negli anni bisestili int bk = 0; // bk viene utilizzato per registrare il numero di spazi vuoti da inserire String week[] = {"lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica"}; for(int i=1;i<13;i++) { t = 0; bk = 0; if((i==2)&&(isLeap(year)==1)) t = 1; // Quando è l'anno bisestile, impostalo a 1 per il mese di febbraio System.out.println("\n\n\t\t" + year + " anno " + i + " mese\n"); for(int j=0;j<7;j++) System.out.print(week[j] + "\t"); System.out.println(); while(bk++<wkpoint) System.out.print('\t'); for(int j=1;j<=(30+dayadd[i]+t);j++) { System.out.print(j + "\t"); // Output ciclico delle date mensili if(wkpoint==6) { wkpoint = 0; System.out.print('\n');} // Quando il contatore wkpoint è 6, lo reimposta a 0 e va a capo else wkpoint++; } } } public static void main(String[] args){ String week[] = {"lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica"}; System.out.println("Il giorno inserito è il " + cptDay(2009, 2, 15) + " giorno dell'anno"); System.out.println("Questo giorno è la settimana " + weekCount(2009, 2, 15) + " dell'anno " + week[getWeek(2009, 2, 15)] + " "); printCal(2009); } }
Terzo:
Informativa inserita dall'utente --> verifica dell'informativa (addeguamento alle richieste)
Calcola il numero totale di giorni dal 1° gennaio 1900 (lunedì) al giorno corrente
(1) Calcolare il numero totale di giorni dal 1900 al (anno inserito dall'utente - 1) --> Attenzione alle differenze tra anno bisestile e anno comune
(2) Calcolare il numero di giorni dal 1° gennaio al (mese inserito dall'utente - 1) dell'anno inserito
3. Calcolare il giorno della settimana della prima giornata del mese inserito
4. Formattazione dell'output
Di seguito, eseguiamo passo dopo passo l'analisi del codice
1) Utilizzare un ciclo do-while per accettare le informazioni di input dell'utente e utilizzare if-else per il giudizio
int year; int month; boolean xn = false; do { System.out.println("Inserire l'anno: "); year = input.nextInt(); System.out.println("Inserire il mese: "); month = input.nextInt(); // Utilizzare espressioni booleane per il controllo delle informazioni di input xn = (month < 1) || (month > 12) || (year < 1); if(xn) { System.out.println("Informazioni di input errate, reinserire! "); } }
2) Determinare se è un anno bisestile e calcolare il numero totale di giorni dal 1900 al (anno inserito dall'utente - 1)
int everyYearDay = 0; // Giorni dell'anno int totalYearsDays = 0; // Calcolare i giorni dell'anno int inputYearDay = 0 // Registrare i giorni dell'anno inserito dall'utente boolean yn = false; // Indicatore di anno bisestile //Calcolare i giorni utilizzando un ciclo for for(int i = 1900; i <= year; i++) { if(((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)) // Condizioni per l'anno bisestile { yn = true; everyYearDay = 366; } else { yn = false; everyYearDay = 365; } // Se l'anno nel ciclo è inferiore all'anno inserito dall'utente, accumulare i giorni if(i < year) { totalYearsDays = totalYearsDays + everyYearDay; } else { inputYearDay = everyYearDay; System.out.println(year + " anno: " + inputYearDay + " giorni"); } }
3) Determinare il numero di giorni del mese e calcolare il numero di giorni dal 1° gennaio all'(mese inserito dall'utente - 1)
int everyMonthDay = 0; //Registrare il numero di giorni di ogni mese int totalMonthsDays = 0; //Numero totale di giorni int inputMonthDay = 0; //Registrare il numero di giorni del mese inserito nell'anno inserito dall'utente //Calcolare i giorni utilizzando un ciclo for for(int i = 1;i <= month;i ++) { switch(i) { case 4: case 6: case 9: case 11: everyMonthDay = 30; break; case 2: if(xn) //xn è un variabile booleana utilizzata per registrare gli anni bisestili { everyMonthDay = 29; } else { everyMonthDay = 28; } break; default: everyMonthDay = 31; break; } if(i < month) { totalMonthsDays = totalMonthsDays + everyMonthDay; } else { inputMonthDay = everyMonthDay; System.out.println(month + "月共有:" + inputMonthDay + "天"); } }
Quattro, calcolare il numero totale di giorni e determinare il giorno della settimana del primo giorno del mese inserito
int total = totalMonthsDays + totalYearsDays; //Calcolare il numero totale di giorni
int temp = (total + 1) % 7; //Determinare il giorno della settimana del primo giorno del mese inserito
Cinque, output formattato
//Poiché il formato di input è //Domenica Lunedì Martedì Mercoledì Giovedì Venerdì Sabato //Quando è domenica, possiamo stampare direttamente, ma quando //Quando il primo giorno è lunedì, dobbiamo stampare prima gli spazi //Poi stampare la data, in modo che i numeri e i giorni della settimana corrispondano //Stampare spazi for(int spaceno = 0;spaceno < temp;spaceno ++) { System.out.print("\t"); } //Stampare i numeri in ordine for(int i = 1;i <= inputMonthDay;i ++) { if((total + i ) % 7) //Determinare se è il caso di cambiare riga { System.out.println(i ); } else { System.out.print(i + "\t"); } }
Quattro, scrivere un calendario perpetuo in Java utilizzando la classe Calendar, inserire un anno e visualizzare il calendario dell'anno corrente
public class MyCalendar { public static void main(String args[]) { Scanner sc = new Scanner(System.in); Calendar c = Calendar.getInstance(); System.out.println("Inserisci l'anno numerico: (ad esempio 2014)"); int year = sc.nextInt(); sc.close(); // int year = 2014; c.set(Calendar.YEAR,year); for (int i = 0; i < 12; i++) { c.set(Calendar.MONTH,i); // c.set(Calendar.DATE,1); //设置成1月 printMonth(c); } } public static void printMonth(Calendar c){ c.set(Calendar.DAY_OF_MONTH,1); //设置成一日 System.out.printf("\n\n========= %s 月 =========\n",c.get(Calendar.MONTH)+1); String[] weeks = { "日", "一" , "二", "三", "四", "五", "六" }; for (int i = 0; i < weeks.length; i++) { System.out.printf("%s" + (i != 6 ?"\t":"\n"),weeks[i]); } int offday = c.get(Calendar.DAY_OF_WEEK) - 1; for(int i = 0; i < offday; i++){ System.out.printf("\t"); } int month = c.get(Calendar.MONTH); while(c.get(Calendar.MONTH) == month ){ System.out.printf("%d" + ( (c.get(Calendar.DAY_OF_WEEK)) != 7 ? "\t":"\n") ,c.get(Calendar.DAY_OF_MONTH)); c.add(Calendar.DAY_OF_MONTH, 1); } } }
V, programma: implementazione del programma del calendario perpetuo e dell'applet dell'orologio
Le conoscenze di Java includono le librerie e gli strumenti comuni di Java (Data, Calendar, ecc.), le eccezioni (try...catch), i thread, l'interfaccia utente AWT e altre conoscenze di base.
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; //创建窗口和年历 class MainFrame extends JFrame{ JPanel panel=new JPanel(new BorderLayout());//BorderLayout为边界布局 JPanel panel1=new JPanel(); JPanel panel2=new JPanel(new GridLayout(7,7));//GridLayout为网格布局 JPanel panel3=new JPanel(); JLabel []label=new JLabel[49]; JLabel y_label=new JLabel("年份"); JLabel m_label=new JLabel("月份"); JComboBox com1=new JComboBox(); JComboBox com2=new JComboBox(); JButton button=new JButton("查看"); int re_year,re_month; int x_size,y_size; String year_num; Calendar now=Calendar.getInstance(); //实例化Calendar MainFrame(){ super("万年历-Jackbase"); setSize(300,350); x_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()); y_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()); setLocation((x_size - 300) / 2, (y_size - 350) / 2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel1.add(y_label); panel1.add(com1); panel1.add(m_label); panel1.add(com2); panel1.add(button); for(int i = 0; i < 49; i++){ label = new JLabel("", JLabel.CENTER); // Impostare il testo visualizzato al centro panel2.add(label); } panel3.add(new Clock(this)); panel.add(panel1, BorderLayout.NORTH); panel.add(panel2, BorderLayout.CENTER); panel.add(panel3, BorderLayout.SOUTH); panel.setBackground(Color.white); panel1.setBackground(Color.white); panel2.setBackground(Color.white); panel3.setBackground(Color.white); Init(); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int c_year, c_month, c_week; c_year = Integer.parseInt(com1.getSelectedItem().toString()); // Ottenere l'anno selezionato c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // Ottenere il mese corrente e sottrarre 1, nel computer il mese è da 0 a 11 c_week = use(c_year, c_month); // Chiamata alla funzione use per ottenere il giorno della settimana Resetday(c_week, c_year, c_month); // Chiamata alla funzione Resetday }});}} setContentPane(panel); setVisible(true); setResizable(false); } public void Init() { int year, month_num, first_day_num; String log[] = {"日", "一", "二", "三", "四", "五", "六"}; for(int i = 0; i < 7; i++) { label.setText(log); } for(int i = 0; i < 49; i = i + 7) { label.setForeground(Color.red); // Impostare la data di domenica in rosso } for(int i = 6; i < 49; i = i + 7) { label.setForeground(Color.red); // Impostare la data di domenica in rosso } for(int i = 1; i < 10000; i++) { com1.addItem(""+i); } for(int i = 1; i < 13; i++) { com2.addItem(""+i); } month_num = (int)(now.get(Calendar.MONTH)); // Ottenere il mese corrente year = (int)(now.get(Calendar.YEAR)); // Ottenere l'anno corrente com1.setSelectedIndex(year - 1); // Impostare la lista a discesa per visualizzare l'anno corrente com2.setSelectedIndex(month_num); // Impostare la lista a discesa per visualizzare il mese corrente first_day_num = use(year, month_num); Resetday(first_day_num, year, month_num); } public int use(int reyear, int remonth) { int week_num; now.set(reyear, remonth, 1); // Impostare la data su primo giorno del mese e anno specificato week_num = (int)(now.get(Calendar.DAY_OF_WEEK)); // Ottenere il giorno della settimana del primo giorno return week_num; } public void Resetday(int week_log, int year_log, int month_log) { int month_score_log; // etichetta per determinare se è un anno bisestile int month_day_score; // memorizza il numero di giorni del mese int count; month_score_log=0; month_day_score=0; count=1; if(year_log%4==0&&year_log%100!=0||year_log%400==0){// verifica se è un anno bisestile month_score_log=1; } month_log=month_log+1; // aggiungi 1 al mese ricevuto switch(month_log){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: month_day_score=31; break; case 4: case 6: case 9: case 11: month_day_score=30; break; case 2: if(month_score_log==1){ month_day_score=29; } else{ month_day_score=28; } break; } for(int i=7;i<49;i++){ // inizializzazione dei tagli label.setText(""); } week_log=week_log+6; // aggiungi 6 al numero della settimana per visualizzare correttamente month_day_score=month_day_score+week_log; for(int i=week_log;i<month_day_score;i++,count++){ label.setText(count+""); } } } // creazione dell'orologio class Clock extends Canvas implements Runnable{ MainFrame mf; Thread t; String time; Clock(MainFrame mf){ this.mf=mf; setSize(400,40); setBackground(Color.white); t=new Thread(this); // istanza del thread t.start(); // chiamata al thread } public void run(){ while(true){ t.sleep(1000); // Addormentarsi per 1 secondo catch(InterruptedException e){ } System.out.println("Eccezione"); } this.repaint(100); } } public void paint(Graphics g){ Font f = new Font("宋体", Font.BOLD, 16); SimpleDateFormat SDF = new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss"); // Formattazione del tipo di visualizzazione del tempo Calendar now = Calendar.getInstance(); time = SDF.format(now.getTime()); // Ottieni la data e l'ora corrente g.setFont(f); g.setColor(Color.red); g.drawString(time, 100, 25); } } public class Wnl{ public static void main(String [] args){ JFrame.setDefaultLookAndFeelDecorated(true); MainFrame start = new MainFrame(); } }
Ecco le risorse per implementare il calendario perpetuo in Java, speriamo che possano aiutare chi desidera implementare questa funzione, grazie per il supporto del nostro sito!
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.