English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 实现万年历总结

Primero, el código de implementación del calendario lunar en Java:

package calendar;
import java.util.Scanner;//Proyecto de calendario
public class RiLi{
 public static void main(String[] args){
 Scanner A=new Scanner(System.in);
 System.out.println("Por favor, ingrese el año:");
 int year=A.nextInt();
 System.out.println("Por favor, ingrese el mes:");
 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;
  }
  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;}
  de lo contrario{
   sum=sum+28;
  }
  }
  if(i==4||i==6||i==9||i==11){
   sum+=30;
  }
   sum+=31;
  }
  }
 }
 sum=sum+1;
 int wekday=sum%7;
 System.out.println("Día\tLunes\tMartes\tMiércoles\tJueves\tViernes\tSábado");
 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");
  }
  System.out.print(i+"\t");
  }
  sum++;
 }
 }
}

Un calendario lunar japonés, el más simple posible, que muestra el año, mes, día, día de la semana, número de semana actual, muestra si es un año bisiesto, imprime el calendario lunar, etc., también muestra el día del año actual y el día de la semana de una fecha específica, utiliza la fórmula de cálculo de Kim Larsen, W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 en la fórmula, d representa el número de días del mes, m representa el número del mes y y representa el número del año. Nota: En la fórmula, hay un lugar que es diferente de otras fórmulas: Toma como el decimotercero y decimocuarto mes del año anterior a enero y febrero, por ejemplo, si es2004-1-10se convierte en:2003-13-10para introducir en la fórmula y calcular.

public class myCalendar {
  //El siguiente fragmento de código se utiliza para calcular en qué día del año cae la fecha de entrada
  public static int cptDay(int year , int month , int day){
    byte dayadd[]={1,-2,1,0,1,0,1,1,0,1,0,1};  //para almacenar el número de días de cada mes3la diferencia con 0
    int daycount = 0;  //este es el contador de días daycount, inicializado en 0
      for(int i=0; i<month-1; i++)
        daycount+=(30+dayadd[i]);
      daycount+=day;
      return (month>2)?daycount+isLeap(year):daycount;
  }
  //sección de programa para determinar si es un año bisiesto, si es un año bisiesto devuelve1,si es un año bisiesto devuelve 0
  public static int isLeap(int year){
    if((year%400==0)||((year%4==0)&&(year%100!=0)))
      return 1;
    return 0;
  }
  //para calcular en qué día de la semana cae la fecha de entrada
  //Se utiliza la fórmula de cálculo de Kimball-Rosenfeld
  //W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
  //En la fórmula, d representa el número de días del mes, m representa el número del mes y y representa el número del año.
  //Atención: En la fórmula, hay un lugar que es diferente de otras fórmulas:
  //Toma como el decimotercero y decimocuarto mes del año anterior a enero y febrero, por ejemplo, si es2004-1-10se convierte en:2003-13-10para introducir en la fórmula y calcular.
  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;
  }
  //El siguiente fragmento de código se utiliza para calcular en qué semana del año cae la fecha de entrada
  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;  
  }
  //imprimir el calendario de milenio
  public static void printCal(int year){
    byte dayadd[]={0,1,-2,1,0,1,0,1,1,0,1,0,1}; //del mismo modo, el número de días de cada mes y3la diferencia con 0, preste atención, el 0 de dadadd[0] no se utiliza
    int wkpoint = getWeek(year,1,1);      //wkpoint se usa para indicar el número de la semana del día actual   
    int t = 0;                 //t se usa como un marcador para resolver el problema de los años bisiestos2el mes tiene29el problema del día
    int bk = 0;                 //bk se usa para registrar el número de espacios en blanco que se deben ingresar
    String week[]={"lunes","martes","miércoles","jueves","viernes","sábado","domingo"};
    for(int i=1;i<13;i++)
    {
      t = 0;
      bk = 0;
      if((i==2)&&(isLeap(year)==1))
        t = 1;               //sólo en el caso de los años bisiestos2sólo se establece a 0 cuando es el mes1
      System.out.println("\n\n\t\t"+year+" año "+i+" mes\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");      //imprimir las fechas de cada mes en un ciclo
        if(wkpoint==6)
          { wkpoint = 0; System.out.print('\n');} //cuando el contador wkpoint es6a 0 y salta una línea
        else
          wkpoint++;                       
      }
    }
  }
  public static void main(String[] args){
    String week[]={"lunes","martes","miércoles","jueves","viernes","sábado","domingo"};
    System.out.println("la fecha ingresada es el "+cptDay(2009,2,15)+"días");
    System.out.println("este día es el "+weekCount(2009,2,15)+"semana "+week[getWeek(2009,2,15);
    printCal(2009);
  }
}

Tres,

 1.Información ingresada por el usuario-->para hacer juicio de información (cumplir o no los requisitos)

2.Con19año 001mes1día (lunes) como base para calcular19año 001mes1días hasta el día actual
   (1)primero calcular1900 hasta (año ingresado por el usuario - 1)días totales   -->Atención, diferencia entre años bisiestos y no bisiestos
   (2)calcular el número de días del año ingresado1Mes hasta (mes ingresado por el usuario - 1días)

 3.Calcular el primer día de la semana del mes ingresado

4.Formatear la salida

A continuación, analizaremos el código paso a paso

Uno), usar do-while para aceptar la información de entrada del usuario y usar if-else para hacer juicio

int year;  
int mes;  
boolean xn = false;  
do 
{  
      System.out.println("Ingrese el año:");  
      year = input.nextInt();  
      System.out.println("Ingrese el mes:");  
      mes = input.nextInt();  
      //Usar expresiones booleanas para juzgar la información de entrada  
      xn = (mes < 1) || (mes > 12) ||(year < 1);  
      if(xn)  
     {  
         System.out.println("Error en la información de entrada, ingrese nuevamente!");  
     }  
}while(xn); 

Dos), juzgar si es año bisiesto y calcular1900 hasta (año ingresado por el usuario - 1Días totales del año

int everyYearDay = 0; //Días anuales  
int totalYearsDays = 0; //Calcular el número de días del año  
int inputYearDay = 0  //Registra el número de días del año ingresado por el usuario  
boolean yn = false;  //Identificador de año bisiesto  
//Utilizar el bucle for para calcular los días  
for(int i = 1900;i <= year;i ++)  
{  
   if(((i % 4 == 0)&&(i % 100 != 0))||(i % 400 == 0)) //Condición de juicio de años bisiestos  
   {  
          yn = true;  
          everyYearDay = 366;  
   }  
   else 
  {  
          yn = false;  
          everyYearDay = 365;  
  }  
  //Si el año en el ciclo es menor que el año ingresado por el usuario, acumula días  
 if(i < year)  
   {  
       totalYearsDays = totalYearsDays + everyYearDay;  
   }  
   else 
   {  
       inputYearDay = everyYearDay;  
       System.out.println(year + "Año total:" + inputYearDay + "días");  
   }  
} 

Tres), juzgar el número de días del mes y calcular el año1Mes hasta (mes ingresado por el usuario -1días)

int everyMonthDay = 0;  //Registra el número de días de cada mes  
int totalMonthsDays = 0; //Número total de días  
int inputMonthDay = 0;  //Registrar el número de días del mes ingresado por el usuario en el año ingresado por el usuario  
//Utilizar el bucle for para calcular los días  
for(int i = 1;i <= month;i ++)  
{  
   switch(i)  
   {  
       caso 4:  
       caso 6:  
       caso 9:  
       caso 11:  
            everyMonthDay = 30;  
            romper;  
       caso 2:  
            if(xn)  //xn se utiliza para registrar el booleano de los años bisiestos  
            {  
               everyMonthDay = 29;  
            }  
            else 
           {  
               everyMonthDay = 28;  
           }  
           romper;  
       default:  
                everyMonthDay = 31;  
                romper;  
   }  
   if(i < month)  
  {  
       totalMonthsDays = totalMonthsDays + everyMonthDay;  
  }  
  else 
  {  
        inputMonthDay = everyMonthDay;  
        System.out.println(month + "meses:" + inputMonthDay + "días");  
  }  
} 

Cuatro, calcular el número total de días y calcular el día de la semana del primer día del mes ingresado por el usuario

int total = totalMonthsDays + totalYearsDays; //Calcular el número total de días   
int temp = (total + 1) % 7; //Determinar el día de la semana del primer día del mes de entrada 

Cinco, salida formateada

//Porque el formato de entrada es  
//Domingo Lunes Martes Miércoles Jueves Viernes Sábado  
//Cuando sea domingo, simplemente lo imprimimos, pero cuando  
//Cuando el primer día de la semana sea lunes, debemos imprimir espacios en blanco primero  
//Luego de imprimir la fecha, para que los números y los días de la semana correspondan  
//Imprimir espacios en blanco  
for(int spaceno = 0;spaceno < temp;spaceno ++)  
{  
   System.out.print("/t");  
}  
//Imprimir números en orden  
for(int i = 1;i <= inputMonthDay;i ++)  
{  
   if((total + i ) % 7)   //Determinar si es necesario cambiar de línea  
   {  
        System.out.println(i );  
   }  
   else 
  {  
         System.out.print(i + "/t");  
  }  
} 

Cuatro, escribir un calendario anual en java (usando la clase Calendar), ingrese el año y muestre el calendario del año actual

public class MyCalendar {
  public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    Calendar c = Calendar.getInstance();
    System.out.println("Por favor, ingrese el año numérico: (por ejemplo 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); //Establecer en1mes
      printMonth(c);
    } 
  }
  public static void printMonth(Calendar c){
    c.set(Calendar.DAY_OF_MONTH,1);  //Establecer en el primer día
    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);
    }
  }
}

 Cinco, programa: calendario perpétuo+Implementación de un pequeño programa de reloj

Los puntos clave de Java incluyen bibliotecas y herramientas comunes de Java (como la clase Date, la clase Calendar), excepciones (try...catch), hilos, interfaz gráfica de usuario AWT, entre otros conocimientos básicos.

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);//将显示的字符设置为居中
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()); //Obtener el año seleccionado actual
c_month = Integer.parseInt(com2.getSelectedItem().toString())-1; //Obtener el mes actual y restar1, El mes en la computadora es de 0 a -11
c_week = use(c_year, c_month); //Llamar a la función use, obtener el día de la semana
Resetday(c_week, c_year, c_month); //Llamar a la función 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); //Establecer el día domingo en rojo
}
for(int i=6;i<49; i = i+7){
label.setForeground(Color.red);//Establecer también el día sábado en rojo
}
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)); //Obtener el mes actual de la hora actual
year = (int)(now.get(Calendar.YEAR)); //Obtener el año actual de la hora actual
com1.setSelectedIndex(year-1); //Establecer la lista desplegable para mostrar el año actual
com2.setSelectedIndex(month_num); //Establecer la lista desplegable para mostrar el mes actual
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); //Establecer la hora en el primer día del mes y año que se desea consultar
week_num= (int)(now.get(Calendar.DAY_OF_WEEK));//Obtener el número del día de la semana del primer día
devolver week_num;
}
public void Resetday(int week_log,int year_log,int month_log){
int month_score_log; //Marcar si es un año bisiesto
int month_day_score; //Almacenar el número de días del mes
int count;
month_score_log=0;
month_day_score=0;
count=1;
si(year_log%4==0&&year_log%100!=0||year_log%400==0){//Determinar si es un año bisiesto
month_score_log=1;
}
month_log=month_log+1; //Aumentar el número del mes recibido1
switch(month_log){
caso 1:
caso 3:
caso 5:
caso 7:
caso 8:
caso 10:
caso 12:
month_day_score=31;
romper;
caso 4:
caso 6:
caso 9:
caso 11:
month_day_score=30;
romper;
caso 2:
si(month_score_log==1){
month_day_score=29; 
}
de lo contrario{
month_day_score=28;
}
romper;
}
for(int i=7;i<49;i++){ //Inicializar etiqueta
label.setText("");
}
week_log=week_log+6; //Aumentar el número de la semana6,para mostrar correctamente
month_day_score=month_day_score+week_log;
for(int i=week_log;i<month_day_score;i++,count++){
label.setText(count+");
}
}
}
//Crear reloj
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); //Instanciar hilo
t.start(); //Llamar hilo 
}
public void run(){
while(true){
try{
t.sleep(),1000); //Descanso1Segundos
}
System.out.println("Excepción");
}
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");//Formatear el tipo de visualización del tiempo
Calendar now = Calendar.getInstance();
time = SDF.format(now.getTime()); //Obtener la fecha y hora actual
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();
} 
}

Aquí están los materiales para implementar el calendario lunar en Java, espero que ayuden a los amigos que desean implementar esta función, gracias por el apoyo de este sitio!

Declaración: El contenido de este artículo se obtiene de la red, pertenece al autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.