Resolución ejercicios fechas java


import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Arrays;
import java.util.Locale;
import java.util.Scanner;

public class FechasHoras {

	public static void main(String[] args) {

		// La función esViernes me devuelve...
		for (LocalDate fecha : diasLaborablesArray(1, 11, 2023)) {
			System.out.println(fecha);
		}
		System.out.println(Arrays.toString(diasLaborablesArray(1, 11, 2023)));
	}

	public static boolean esViernes() {
		// Fecha de hoy
		LocalDate hoy = LocalDate.now();
		// Si hoy es viernes
		return hoy.getDayOfWeek() == DayOfWeek.FRIDAY;
	}

	public static int hastaelFinde() {
		// Fecha de hoy
		LocalDate hoy = LocalDate.now();
		// Cogemos el día numérico de la sema 1-lunes...7 domingo
		int dia = hoy.getDayOfWeek().getValue();
		// Si es sábado o domingo devolvemos 0
		if (dia >= 6) {
			return 0;
		} else {
			// Devolvemos 6 menos el valor
			return 6 - dia;
		}

	}

	public static int hastaelFindeNinja() {

		// Obtenemos el día numérico de la semana
		int dia = LocalDate.now().getDayOfWeek().getValue();
		// Operador ternario para devolver 0 o la resta de días como
		// En el ejemplo anterior
		// Operador ternario if comprimido
		// condicion ? valor si cierto : valor si falso
		return dia >= 6 ? 0 : 6 - dia;
	}

	public static LocalDate vencimiento(LocalDate fecha, int dias) {
		// Añado los días a la fecha
		return fecha.plusDays(dias);
	}

	public static String diaCumple(int mes, int dia) {
		// Creo la fecha de cumpleaños de este año
		LocalDate cumple = LocalDate.of(LocalDate.now().getYear(), mes, dia);
		// Obtengo el día de la semana en formato string
		return cumple.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.of("es", "es"));
	}

	public static String diaCumpleOtro(int mes, int dia) {
		LocalDate cumple = LocalDate.of(LocalDate.now().getYear(), mes, dia);
		// Lo mismo pero usando un formateador
		return cumple.format(DateTimeFormatter.ofPattern("EEEE"));
	}

	public static int numFestivos(int anyo, int mes) {
		// Pongo la fecha del dia uno de mes
		LocalDate fecha = LocalDate.of(anyo, mes, 1);
		// Defino un contador
		int festivos = 0;
		// Mientras sigamos en este mes
		while (fecha.getMonthValue() == mes) {
			// Comparo con sábado y domingo
			if (fecha.getDayOfWeek() == DayOfWeek.SATURDAY || fecha.getDayOfWeek() == DayOfWeek.SUNDAY) {
				festivos++;
			}
			// Sumo uno al día para recorrer todos los días del mes
			fecha = fecha.plusDays(1);
		}
		return festivos;
	}

	public static String diasLaborables(int dia, int mes, int anyo) {
		// Creo la fecha que me han pasado
		LocalDate fecha = LocalDate.of(anyo, mes, dia);
		// Aquí acumularé las fechas
		String resultado = "";
		// Contador días laborables
		int cont = 0;
		while (cont < 15) {
			// Si el día es laborable
			if (fecha.getDayOfWeek().getValue() < 6) {
				// Lo añado a la cadena
				resultado += fecha.toString() + " - ";
				// Sumo uno al contador
				cont++;
			}
			// Siempre sumo uno a la fecha
			fecha = fecha.plusDays(1);
		}

		return resultado;
	}

	public static LocalDate[] diasLaborablesArray(int dia, int mes, int anyo) {
		return diasLaborablesArray(dia,mes,anyo,15);
	}
	public static LocalDate[] diasLaborablesArray(int dia, int mes, int anyo, int numDias) {
		// Creo la fecha que me han pasado
		LocalDate fecha = LocalDate.of(anyo, mes, dia);
		// Aquí acumularé las fechas

		LocalDate[] resultado = new LocalDate[15];
		// Contador días laborables
		int cont = 0;
		while (cont < numDias) {
			// Si el día es laborable
			if (fecha.getDayOfWeek().getValue() < 6) {
				// Lo añado a la cadena
				resultado[cont] = fecha;
				// Sumo uno al contador
				cont++;
			}
			// Siempre sumo uno a la fecha
			fecha = fecha.plusDays(1);
		}

		return resultado;
	}
}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos