Demandez n jours ouvrables plus tard avec JAVA

Demandez n jours ouvrables plus tard avec JAVA

Lors de l'écriture de la logique métier, vous aurez peut-être besoin d'une date n jours ouvrés plus tard. (Alerte, etc. si le traitement n'est pas effectué dans les n jours ouvrables) Cependant, il est assez difficile de demander cela. Il est facile de calculer si les jours fériés ne sont que les samedis et dimanches, mais il n'y a pas de règles fixes pour les jours fériés. Il est nécessaire de créer et de gérer un master sur votre propre système ou d'obtenir des informations de l'extérieur.

Le premier est gênant car vous devez gérer le maître vous-même, donc cette fois j'ai créé une classe pour vérifier les jours ouvrables par ce dernier moyen.

Ce qui a été fait


@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class BusinessDayApiAccessorServiceImpl implements BusinessDayApiAccessor {

	private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuuMMdd");

	private final OkHttpClient client;

	@Override
	public LocalDate getBusinessDayAfter(LocalDate baseDate, int days) {
		return getBusinessDay(true, baseDate, days);
	}

	@Override
	public LocalDate getBusinessDayBefore(LocalDate baseDate, int days) {
		return getBusinessDay(false, baseDate, days);
	}

	private LocalDate getBusinessDay(boolean isNext, LocalDate baseDate, int days) {
		if (days == 0) {
			return baseDate;
		}
		return getBusinessDay(isNext, sendRequest(isNext, isNext ? baseDate.plusDays(1) : baseDate.minusDays(1)),
				days - 1);
	}

	private LocalDate sendRequest(boolean isNext, LocalDate baseDate) {
		HttpUrl httpUrl = new HttpUrl.Builder().scheme("http").host("s-proj.com").addPathSegment("utils")
				.addPathSegment("getBusinessDay.php").addQueryParameter("kind", isNext ? "next" : "prev")
				.addQueryParameter("date", baseDate.format(DATE_FORMATTER)).build();
		Request request = new Request.Builder().url(httpUrl).get().build();
		try (Response response = client.newCall(request).execute()) {
			String resultBody = response.body().string();
			return LocalDate.parse(resultBody, DATE_FORMATTER);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	@Override
	public boolean isBusinessDay(LocalDate date) {
		return sendRequest(true, date).isEqual(date);
	}
}

Commentaire

National Holiday Check utilisera l'API des jours fériés du public comme source pour déterminer les jours ouvrables. Cette API renverra la date si la date cible est un jour ouvrable et le jour ouvrable suivant ou précédent si ce n'est pas un jour ouvrable. Par conséquent, vous pouvez trouver la date n jours ouvrables plus tard (ou avant) en exécutant la méthode de frappe de l'API tout en décalant la date d'un jour jusqu'à ce qu'elle atteigne n. De plus, OkHttp est utilisé pour frapper l'API.

point important

Comme l'accès API à l'extérieur est une logique sandwich et récursive, il est réaliste que la valeur de n soit au plus autour de 10. Si vous essayez de demander quelque chose comme 100 jours ouvrables plus tard, ce sera difficile. (Je ne pense pas qu'il y ait grand-chose dans les affaires) Si vous en avez besoin, il est plus sûr d'utiliser une autre méthode.

Recommended Posts

Demandez n jours ouvrables plus tard avec JAVA
[Java] Obtenez la date 10 jours plus tard avec la classe Calendar
Activez OpenCV avec java8. (Pour moi-même)
Premiers pas avec Ruby pour les ingénieurs Java
Apprenez de «Et alors», les bases de Java [pour les débutants]
Conseils d'interopérabilité avec Kotlin à envoyer aux développeurs Java
Exemple de contre-mesure NullPointerException (facultatif) pour Java8 ou version ultérieure
Liens et mémos pour démarrer avec Java (pour moi-même)
Consulter le mémo de la copie de fichier de Java 1.7 ou version ultérieure
Course d'obstacles facile avec traitement pour Java
Java n ° 3 pour l'utilisation de la mémoire de flux utile pour les entreprises
Opérations de conteneur Docker avec l'API Docker-Client pour Java
Pour l'apprentissage JAVA (2018-03-16-01)
IDE 2017 pour Java
/ n \ n docker java
Java pour instruction
Exercices de programmation Java pour les nouveaux arrivants impopulaires auprès des ingénieurs actifs
[Bases de Java] Créons un triangle avec une instruction for
Obtenez la configuration Azure App Service pour Java avec System.getEnv ()
Générer des données factices pour divers tests avec Faker (java)
[Java] Procédure de construction de l'environnement pour le développement de struts 1.3 avec Eclipse
Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4